我有以下powershell命令:
(gc c:\foo.xml -Raw) -replace '(?s)(.*)<bar baz="foo" />', '$1LOL' | Out-File c:\foo.xml
Run Code Online (Sandbox Code Playgroud)
我知道验证这个powershell命令在PowerShell中输入时有效.
现在我想从cmd提示符运行它,所以我知道我需要在cmd中执行:
powershell -Command [the-above-powershell-command]
Run Code Online (Sandbox Code Playgroud)
但是,powershell命令有很多特殊字符,无论我使用什么逃脱,我都无法做到正确.
有人可以为我逃脱powershell命令,所以我可以把它放在cmd?
我最初使这个问题变得过于复杂,现在我想简化一下:
Microsoft是否有可能,更重要的是,由Microsoft正式支持我引用ValidateScript部分中的参数而不是要验证的参数?
这是我想做的:
function test
{
Param(
[switch]
$doThingA = $False,
[ValidateScript({
If( $doThingA -eq $True -and -not ( Test-Path $_ -PathType Leaf ) )
{
Write-Output $False
}
Write-Output $True
})]
[string]
$doThingA_FilePath
)
}
Run Code Online (Sandbox Code Playgroud)
这是Powershell的文档中有关ValidateScript参数的内容
当您使用ValidateScript属性时,正在验证的参数值将映射到$ _变量。您可以使用$ _变量来引用脚本中的参数值。
在过去的一周里,我一直在研究一些Powershell最佳实践.其中之一是重用Powershell参数名称,使命令更直观.
有没有人有检索所有函数的参数名称的功能?
Powershell之间的区别是什么?
Set-Location "$env:ProgramFiles\My App\"
Run Code Online (Sandbox Code Playgroud)
和
[System.IO.Directory]::SetCurrentDirectory("$env:ProgramFiles\My App\")
Run Code Online (Sandbox Code Playgroud)
问的原因是我最近有一个脚本用于Add-Type -Path XXX添加对程序集的引用.程序集依赖于与程序集位于同一文件夹中的许多DLL(一些可能在运行时链接而不是加载时间).
所以我想我会将目录更改为该文件夹,以帮助程序集找到所有必需的文件.当我改变目录时,Set-Location我得到了一个错误(一个特定于程序集的错误)抱怨它无法找到所有的DLL.SetCurrentDirectory然而,使用工作.
因此,这两个命令似乎做了不同的事情.我原以为他们是一样的.
我要求使用同名的优化图像替换Sitecore媒体库中的加载(2000+)图像.我需要保留原始GUID,以便所有图像仍然链接.
所以我基本上需要替换图像blob数据和大小数据.我已经编写了一个PowerShell脚本来执行此操作,但我发现它始终会处理100个项目.我看不出任何原因,它可能只是我的脚本是垃圾,因为我之前没有使用过PowerShell.
$CurrentImages = Get-Item -Path master: -Query '/sitecore/media library/Images/Products//*[@@TemplateName="Jpeg"]';
$NewImages = Get-Item -Path master: -Query '/sitecore/media library/NewImages//*[@@TemplateName="Jpeg"]';
Write-Host $NewImages.Count;
$CurrentImages|foreach{ $Current = $_; $NewImages|foreach{ $New = $_; if($New.DisplayName -eq $Current.DisplayName){ Write-Host $Current.DisplayName; $Current.Blob = $New.Blob; $Current.Size = $New.Size; $New | Remove-Item}}};
Run Code Online (Sandbox Code Playgroud)
我使用sitecore powershell扩展,如果这也有帮助
我想在PowerShell中验证文件名的输入并检查它是否包含无效字符.我曾尝试过以下方法,当只输入其中一个字符时它会起作用,但当给定的字母数字字符串包含这些字符时似乎不起作用.我相信我没有正确构造正则表达式,验证给定字符串是否包含这些字符的正确方法是什么?提前致谢.
#Validate file name whether it contains invalid characters: \ / : * ? " < > |
$filename = "\?filename.txt"
if($filename -match "^[\\\/\:\*\?\<\>\|]*$")
{Write-Host "$filename contains invalid characters"}
else
{Write-Host "$filename is valid"}
Run Code Online (Sandbox Code Playgroud) 我对Azure还是很陌生,但是我正在努力应对似乎很简单的事情。我已经阅读了大量的资源,这些建议表明这应该很容易,但是我根本无法在新门户(ARM)中获得运行手册来启动特定的VM。它运行并指出“已完成”,但没有任何反应。
这是脚本:
继曾杰克(Jack Zeng)的评论(不幸的是改变不大)后进行了更新。
workflow StartDEVTC1
{
$VerbosePreference = "Continue"
$ErrorActionPreference = "Stop"
$WarnPreference = "Continue"
Write-Output "Getting credential..."
$cred = Get-AutomationPSCredential -Name 'AutomationPowershellCred1'
Write-Output "Adding account..."
Add-AzureRmAccount -Credential $cred
Write-Output "Getting VM..."
$VM = Get-AzureRmVM -ResourceGroupName "myResourceGroup" -Name "DEVTC1" -Status
$vmName = $VM.Name
$vmRG = $VM.ResourceGroupName
Write-Output "Checking state of $vmName from $vmRG..."
$VMDetail = $VM | Select-Object -ExpandProperty StatusesText | convertfrom-json
$vmPowerstate = $VMDetail[1].Code
if($vmPowerstate -like "PowerState/deallocated")
{
Write-Output "$vmName powerstate is $vmPowerstate, starting VM..."
$res = $VM …Run Code Online (Sandbox Code Playgroud) 有没有办法使用PowerShell获取Azure DocumentDB的主键?
谢谢,
我可以重载PowerShell内置类的方法吗?如果是,那怎么样?任何代码示例都会很棒.
本质上,我试图重载Hashtable Dictionary PowerShell对象的Equals方法来进行适当的比较.
我知道您可以在PowerShell中重载cmdlet或函数,以及所采用的最新定义.但我试图重载不是cmdlet或函数,但尝试重载现有类的内置方法.我已经检查了这篇文章:PowerShell中的函数重载
我正在编写一个脚本,我必须从字符串中读取交替的字符.
我使用以下方法:
$s = "abcdef"
$chars = $s.ToCharArray()
For( $i = 0; $i -lt $chars.Count; $i = $i + 2){
$chars[$i]
}
Run Code Online (Sandbox Code Playgroud)
是否有更简单的方法,尤其是基于管道的方法?
powershell ×10
azure ×2
automation ×1
character ×1
cmd ×1
overloading ×1
regex ×1
runbook ×1
sitecore ×1
string ×1
validation ×1