相关疑难解决方法(0)

Powershell将变量传递给start-job

在powershell中,我想学习将变量调用到起始作业的最佳方法,因此我不必编辑每个服务器的脚本,因为它将基于我放置脚本的客户端而具体.

$Servername = 'Server1'
    $pingblock = {
      pathping $servername | Out-File C:\client\PS\ServerPing.TXT
    }
    start-job $pingblock
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时,我只是得到一个帮助文件,好像我忘了指定$ servername.

variables powershell start-job

18
推荐指数
2
解决办法
3万
查看次数

Scriptblock 中的全局范围变量为空

运行以下代码会产生错误,因为用于 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)

powershell powershell-3.0

7
推荐指数
1
解决办法
7140
查看次数

在远程命令中使用局部变量的问题

我需要编写一个脚本来接收变量并在远程系统上进行共享。

这有效:

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)

我需要一种方法来以某种方式传递这些值。

filesystems powershell

4
推荐指数
1
解决办法
543
查看次数

测试连接和变量

$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或空的参数,然后再次尝试该命令.

奇怪的是,如果我换$target8.8.8.8最后一行,一切都很好.

有人可以向我解释一下吗?我一直在努力争取一个小时,并搜索互联网寻找答案,但没有找到任何解决方案.这是PowerShell中的某种错误吗?

BTW - 如果我调用$target它,它给了我8.8.8.8,类型是String,所以......

variables powershell null invoke-command

0
推荐指数
1
解决办法
616
查看次数