相关疑难解决方法(0)

Powershell中的Bash/batch-like子shell

在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)

是否有一种语法可以让它在线完成?

powershell

9
推荐指数
1
解决办法
2508
查看次数

如果cmdlet更改当前目录,如何将其还原?

Azure cmdlet之一,即New-AzureServiceProject在完成时更改当前目录(可能是错误?).

为了让我的脚本中的其他行能够工作,我需要回滚这个变化,最好的方法是什么?如果我没有错,调用"cd"会影响当前的工作目录,如果我的scipt是​​从其他目录调用的.所以也许我应该Push-Location/ Pop-Location以某种方式使用?或者有没有办法阻止第三方cmdlet更改当前位置?

powershell

3
推荐指数
1
解决办法
579
查看次数

运行作业时的参数解释

$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

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

标签 统计

powershell ×3