微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Powershell ScriptBlock不执行

我试图使用invoke-command在远程机器上执行代码。 该方法的一部分包括一个ScriptBlock参数,我知道我没有做正确的事情。

首先,我尝试在脚本中创build一个方法,如下所示:

param([string] $filename) function ValidatePath( $file,$fileType = "container" ) { $fileExist = $null if( -not (test-path $file -PathType $fileType) ) { throw "The path $file does not exist!" $fileExist = false } else { echo $filename found! $fileExist = true } return $fileExist } $responSEObject = Invoke-Command -ComputerName MININT-OU9K10R -ScriptBlock{validatePath($filename)} -AsJob $result = Receive-Job -id $responSEObject.Id echo $result

调用这个,我会这样做.myScriptName.ps1 -filename C:filetotest 。 该脚本将执行,但不会调用函数

然后我想,也许我应该把这个function放到一个新的脚本中。 这看起来像:

如何远程启动不同系统上的应用程序?

如何使用c#.net获取计算机运行过程的详细信息?

Registry.SetValue不适用于x86

实施可靠的日志

定位框架突然从VS 2017失踪

文件1:

$responSEObject = Invoke-Command -ComputerName MININT-OU9K10R -ScriptBlock { .file2.ps1 -filename C:something } -AsJob $result = Receive-Job -id $responSEObject.Id echo $result

文件2:

Param([string] $filename)

这两种方法都不会执行这个function,我想知道为什么; 或者,我需要做些什么来使其工作。

function ValidatePath( $file,$fileType = "container" ) { $fileExist = $null if( -not (test-path $file -PathType $fileType) ) { throw "The path $file does not exist!" $fileExist = false } else { echo $filename found! $fileExist = true } return $fileExist }

成为“真正的pipe理员”(Windows),并在.NET C#中执行真正的pipe理任务?

从PowerShell挂起或hibernate

我怎么能告诉我的应用程序窗口是前景窗口

非COM,非.NET DLL的正确名称

使用C#在远程计算机上设置date,时间和时区

这是因为Invoke-Command在远程计算机的脚本块中执行代码。 远程计算机上没有定义ValidatePath函数,而脚本文件file2.ps1在那里不存在。 没有任何东西可以让远程计算机访问执行Invoke-Command的脚本中的代码或运行脚本的计算机上的文件。 您需要将file2.ps1复制到远程计算机,或将其提供给计算机上共享该文件的共享的UNC路径,或者将ValidatePath函数内容放在脚本块中。 确保将$ file的所有实例更改为$ filename ,反之亦然,并使代码交互式运行,例如,您将消除$ fileExistreturn语句。

要将路径验证代码放在传递给远程计算机的scriptblock中,你可以这样做:

$scriptblock = @" if (-not (Test-Path $filename -PathType 'Container') ) { throw "The path $file does not exist!" } else { echo $filename found! } "@ $responSEObject = Invoke-Command -ComputerName MININT-OU9K10R -ScriptBlock{$scriptblock} -AsJob

注意确保“@不缩进,它必须在行的开头。

顺便说一句,虽然这是没有争议的,那么在抛出语句后立即设置变量有什么意义? 一旦你抛出一个错误函数终止。 $fileExist = false在任何情况下都不会执行。 您可能想要使用写入错误

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐