标签: powershell

CMD:如何在cmd中转义此powershell命令?

我有以下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?

powershell cmd

2
推荐指数
2
解决办法
114
查看次数

请参阅Powershell的ValidateScript中的其他参数

我最初使这个问题变得过于复杂,现在我想简化一下:

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属性时,正在验证的参数值将映射到$ _变量。您可以使用$ _变量来引用脚本中的参数值。

validation powershell

2
推荐指数
1
解决办法
814
查看次数

获取PowerShell函数使用的参数名称

在过去的一周里,我一直在研究一些Powershell最佳实践.其中之一是重用Powershell参数名称,使命令更直观.

有没有人有检索所有函数的参数名称的功能?

powershell

2
推荐指数
1
解决办法
489
查看次数

Set-Location与SetCurrentDirectory

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然而,使用工作.

因此,这两个命令似乎做了不同的事情.我原以为他们是一样的.

powershell

2
推荐指数
1
解决办法
729
查看次数

Sitecore powershell 100项限制

我要求使用同名的优化图像替换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 sitecore

2
推荐指数
1
解决办法
777
查看次数

验证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)

regex powershell

2
推荐指数
1
解决办法
2662
查看次数

启动/停止虚拟机的Azure Runbook提示“已完成”,但没有任何反应

我对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 automation azure runbook

2
推荐指数
1
解决办法
783
查看次数

使用PowerShell获取Azure DocumentDB主键

有没有办法使用PowerShell获取Azure DocumentDB的主键?

谢谢,

powershell azure azure-resource-manager azure-cosmosdb

2
推荐指数
2
解决办法
1618
查看次数

如何重载PowerShell内置类的方法

我可以重载PowerShell内置类的方法吗?如果是,那怎么样?任何代码示例都会很棒.

本质上,我试图重载Hashtable Dictionary PowerShell对象的Equals方法来进行适当的比较.

我知道您可以在PowerShell中重载cmdlet或函数,以及所采用的最新定义.但我试图重载不是cmdlet或函数,但尝试重载现有类的内置方法.我已经检查了这篇文章:PowerShell中的函数重载

powershell overloading

2
推荐指数
1
解决办法
532
查看次数

如何从PowerShell中的字符串中获取交替的字符?

我正在编写一个脚本,我必须从字符串中读取交替的字符.

我使用以下方法:

$s = "abcdef"
$chars = $s.ToCharArray()
For( $i = 0; $i -lt $chars.Count; $i = $i + 2){
    $chars[$i]
}
Run Code Online (Sandbox Code Playgroud)

是否有更简单的方法,尤其是基于管道的方法?

string powershell character

2
推荐指数
1
解决办法
145
查看次数