在Unix shell中,你可以这样写:
( cmd1 ; cmd2 ) | cmd3
Run Code Online (Sandbox Code Playgroud)
在Windows Batch中,您可以编写此代码
( cmd1 & cmd2 ) | cmd3
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,cmd1和cmd2的输出都传递给stdin上的cmd3.
是否有可能在Powershell中做同样的事情?
我还没有找到允许这种情况的有效语法.我希望语句块可以像这样工作,但它没有:
{ cmd1 ; cmd2 } | cmd3
Run Code Online (Sandbox Code Playgroud)
我可以通过声明一个函数来使它工作:
function f() {
cmd1
cmd2
}
f | cmd3
Run Code Online (Sandbox Code Playgroud)
是否有一种语法可以让它在线完成?
Azure cmdlet之一,即New-AzureServiceProject在完成时更改当前目录(可能是错误?).
为了让我的脚本中的其他行能够工作,我需要回滚这个变化,最好的方法是什么?如果我没有错,调用"cd"会影响当前的工作目录,如果我的scipt是从其他目录调用的.所以也许我应该Push-Location/ Pop-Location以某种方式使用?或者有没有办法阻止第三方cmdlet更改当前位置?
$h = "host1.example.com"
$code = {
$(Get-WmiObject -Class "Win32_ComputerSystem" -Namespace "root\cimv2" -ComputerName $h)
}
$timeout = 5
$jobstate = $(Wait-Job -Job ($job = $(Start-Job -ScriptBlock $code)) -Timeout $timeout)
$wmicomobj = $(Receive-Job -Job $job)
Run Code Online (Sandbox Code Playgroud)
为什么上面的代码块会引发以下错误?
无法验证参数“ ComputerName”上的参数。参数为null或
空的。提供一个不为null或为空的参数,然后尝试命令
再次。
+ CategoryInfo:InvalidData:(:) [Get-WmiObject],ParameterBindingValidationException
+ FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.PowerShell.Commands.GetWmiObjectCommand
+ PSComputerName:本地主机
在循环获取多个主机的WMI对象时,我想用它来实现超时。但是首先我需要通过作业执行来获得结果。
powershell ×3