powershell v2远程功能?

时间:2009-12-09 01:47:47

标签: powershell

刚听了Hansellminutes播客。他与两位微软PS开发者进行了一次谈话。他们提到了PS V2远程功能。

我有一些基于PS v1的脚本。在远程处理命令或执行方面,我在本地和远程计算机上安装了PS。然后我使用PsExec.exe来推动bat远程执行PS脚本。现在我想利用PS V2。

对于我所遇到的简单问题,要获取本地文件列表,我可以使用以下代码:

$fs = Get-Item -Path $Path | Where { !$_.PSIsContainer ... } # more constrains in ...
if ( $fs -ne $null )
{
  # continue to work on each file in the collection
   ...
}

从远程获取文件集合的等效命令是什么?我更喜欢返回类似的文件对象集合,以便我可以访问它们的属性。

第二个问题是如何使用外部应用程序在远程执行命令?我之前尝试过使用WIM Process,但是我无法让WMI类处理Windows 2008服务器的情况。然后我使用PsExec.exe将一个蝙蝠推到遥控器上来执行PS脚本。它适用于案例。但是,我必须在遥控器上安装PS的问题。我要去另一个遥控器。我会尽量避免在遥控器上安装PS。我可以利用PS V2优势在远程Windows上执行命令吗?什么是新命令?

顺便说一句,通常,我必须将用户名和密码传递给远程。我想在PS中我也必须传递user / pwd。

2 个答案:

答案 0 :(得分:4)

您可以将上面的代码放在脚本文件中,然后使用V2远程调用在远程计算机上调用它,如下所示:

PS> Invoke-Command remotePCName -file c:\myscript.ps1

您需要使用admin privs运行(如果启用了UAC,则会提升)以便使用远程处理。上面的命令将脚本复制到远程计算机,执行它并返回反序列化的对象。这些物品基本上是物品袋。它们不是“实时”对象,并且像IsReadOnly一样设置它们的属性不会影响远程文件。如果要设置属性,请在远程PC上执行的脚本中执行此操作。

如果您有一点脚本,该选项是使用如下脚本块:

PS> Invoke-Command remotePCName { Get-Item C:\*.txt | Where {$_.IsReadOnly }

您可以在脚本或脚本块中的远程计算机上执行本机命令(EXE)。您只需要确保远程PC上的EXE可用。

关于凭据,如果您在某个域上,并且您在远程计算机上拥有管理员权限,则无需传递凭据,因为您的默认凭据应该有效。如果您需要以特定用户身份运行,请在Invoke-Command上使用-Credential参数,如下所示:

PS> $cred = Get-Credential
PS> icm remotePCName { gci c:\windows\system32 -r *.sys } -credential $cred

答案 1 :(得分:0)

关于您的上一条评论,没有PowerShell会使用Windows集成安全性,因此您不必传递任何用户名或密码,除非您想以其他用户身份运行它。

如果您还没有启用PS远程处理,每次我尝试时我都必须在启用远程处理时关闭UAC(然后我可以在启用远程处理后重新启用UAC)。从提升的命令提示符运行Enable-PSRemoting是不够的,错误消息根本没用。

编辑:我刚刚在新的Windows 7 VM中确认这不是问题。这可能是我不再遇到的测试版问题,因为我长期使用PowerShell和Windows 7的beta / rc / ctp。