在powershell中,我想学习将变量调用到起始作业的最佳方法,因此我不必编辑每个服务器的脚本,因为它将基于我放置脚本的客户端而具体.
$Servername = 'Server1'
$pingblock = {
pathping $servername | Out-File C:\client\PS\ServerPing.TXT
}
start-job $pingblock
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,我只是得到一个帮助文件,好像我忘了指定$ servername.
运行以下代码会产生错误,因为用于 path 的变量虽然在脚本中定义,但被解析为 null 事件:
$ServerName = "test01"
$RemotePath = "C:\Test\"
$TestScriptBlock = { copy-item -Path $RemotePath -Destination C:\backup\ -Force -Recurse }
$CurrentSession = New-PSSession -ComputerName $ServerName
Invoke-Command -Session $CurrentSession -ScriptBlock $TestScriptBlock
Run Code Online (Sandbox Code Playgroud)
如何从 ScriptBlock 中调用父脚本中定义的 $RemotePath?我需要在父脚本的其他部分使用 $RemotePath。注意,这个值不会改变,所以它可以是一个常数。
更新 - 工作解决方案
您必须将变量作为参数传递给脚本块:
$ServerName = "test01"
$RemotePath = "C:\Test\"
$TestScriptBlock = { param($RemotePath) copy-item -Path $RemotePath -Destination C:\backup\ -Force -Recurse }
$CurrentSession = New-PSSession -ComputerName $ServerName
Invoke-Command -Session $CurrentSession -ScriptBlock $TestScriptBlock -ArgumentList $RemotePath
Run Code Online (Sandbox Code Playgroud) 我需要编写一个脚本来接收变量并在远程系统上进行共享。
这有效:
Invoke-Command -ComputerName server -ScriptBlock {$a = [WMICLASS]"Win32_Share"; $a.Create("C:\test","test",0)}
Run Code Online (Sandbox Code Playgroud)
但这并没有:
$sharepath = "C:\test"
$sharename = "test"
Invoke-Command -ComputerName server -ScriptBlock {$a = [WMICLASS]"Win32_Share"; $a.Create($sharepath,$sharename,0)}
Run Code Online (Sandbox Code Playgroud)
我需要一种方法来以某种方式传递这些值。
$server = "SOME_SERVER"
$target = "8.8.8.8"
Invoke-Command -ComputerName $server -ScriptBlock { Test-Connection -ComputerName $target }
Run Code Online (Sandbox Code Playgroud)
所以我有这个代码,它给我一个错误
无法验证参数'ComputerName'的参数.参数为null或空.提供非null或空的参数,然后再次尝试该命令.
奇怪的是,如果我换$target到8.8.8.8最后一行,一切都很好.
有人可以向我解释一下吗?我一直在努力争取一个小时,并搜索互联网寻找答案,但没有找到任何解决方案.这是PowerShell中的某种错误吗?
BTW - 如果我调用$target它,它给了我8.8.8.8,类型是String,所以......