在Powershell中将参数传递给远程命令

时间:2014-08-26 08:43:35

标签: powershell remote-access

使用Powershell我想在远程计算机上创建一个目录,其名称中包含当前时间戳。设置远程处理和我需要的变量之后,这对我来说很容易实现,例如:

Invoke-Command -ComputerName $server -credential $Cred -ScriptBlock {New-Item -ItemType Directory c:\tmp\$(get-date -f yyyyMMddhhmmss)}

现在我想在本地机器上检索日期,如

$currentDateTime = get-date -f yyyyMMddhhmmss

然后使用该变量创建,稍后再远程引用这样的目录,例如用于将文件复制到其中,例如:

Invoke-Command -ComputerName $server -credential $Cred -ScriptBlock {New-Item -ItemType Directory c:\tmp\$currentDateTime}
....(20 secs later)....
copy file \\$server\C$\tmp\$currentDateTime

第一行不起作用,因为在脚本上下文中似乎不知道变量,所以如果我完成第一行,我也不知道第二行是否有效。

作为替代方案,我也很高兴(实际上:更喜欢)从本地机器创建目录,如下所示

New-Item -Path \\$server\C$\tmp\$currentDateTime

这似乎导致缺​​少凭据失败,但此命令似乎不支持-Credential切换(?)。

如何在远程计算机上创建这样的文件夹? (我需要在Powershell 2.0版本中执行此操作)

1 个答案:

答案 0 :(得分:1)

Powershell不知道变量到invoke命令。使用-ArgumentList,您可以将其传递给invoke命令。
看看这个例子,为你做这件事吗?

$datCurrentDate = Get-Date -Format "yyyyMMddhhmmss"
$strFolderPath = "\\servername\c$\temp\$($datCurrentDate)_Foldername"

$scbScriptBlock = {
    $strFolderPath = $args[0]    
    New-Item -ItemType Directory -Path $strFolderPath 
}

Invoke-Command -ComputerName $server -credential $Cred -ScriptBlock $scbScriptBlock -ArgumentList $strFolderPath
....(20 secs later)....
copy file $strFolderPath