我创建了一个包含其他一些 powershell 脚本的 powershell 模块 (.psm1) 文件。我们将它用于共享点。
所以基本上,这就是发生的事情:
该脚本通常会在第一次运行。但是,经过几次尝试后,命令行工具将停止工作并将输出完全发送到屏幕。如果我在运行我的脚本后尝试运行命令行工具(不是 cmd-let),它就不再工作了:没有输出,什么也没做。它与在空白提示符上按回车键相同。任何特定于 powershell 或正在运行的 GUI 应用程序都可以正常工作,但运行任何控制台应用程序都不会产生任何可以想象的结果。唯一的解决方案是关闭我的powershell并再次打开它。它通常会工作一次,我将不得不再次关闭它。我们的用户肯定不会对此感到高兴..
剧本中最“值得注意”的事情:
我试过的:
我将我的代码 strip 化到最低限度:加载一个 xml 文件,并重新启动一些 Windows 服务,但我仍然间歇性地得到这个。我不知道代码的哪一部分会导致这种情况。我很想发布代码,但我们的公司政策禁止我发布。所以我的道歉..
根据以下评论更新:
这大致是我使用代码块的方式。我在下面有这个功能,每次我想让用户知道我正在执行的任务及其结果时都会使用它。
function DoTask($someString, $scriptBlock, $param)
{
try
{
OutputTaskDescription $someString
InvokeCommand $scriptBlock -ArgumentList $param
OutputResultOK
}
catch
{
OutputResultError $_.tostring()
}
}
然后可以像这样使用它:
$stringVar = "something"
$SpSite = new-spsite
deploySomething 'Deploying something' -param $spsite -ScriptBlock {
dosomethingToObject $stringvar
dosomethingToObject $spSite.Name
}
然后它会输出如下内容:
Deploying Something ------------- OK
Deploying Something ------------- ERROR
另请注意,我在参数列表中传递了 $spsite,而我只是直接使用字符串。我仍然不明白这是如何工作的,但似乎我可以访问所有原始类型变量,即使没有将它们作为参数传递,但我必须传递更复杂的对象是参数,否则它们没有任何值(value)。
更新:
经过多次寻找和痛苦的日子。我发现其他人也有同样的痛苦。我的代码表现出与此处描述的完全相同的症状:
http://connect.microsoft.com/PowerShell/feedback/details/496326/stability-problem-any-application-run-fails-with-lastexitcode-1073741502
我想这个问题还没有解决方案。
最佳答案
过了一会儿,我注意到如果我运行了一些非常占用内存的函数,我也会遇到这样的行为,即你尝试执行的所有内容都会再次进入提示符。我建议设置 Set-PsDebug -Trace 2 以查看这些函数实际在做什么。我通过这样做并弄清楚如何使我的功能更高效来解决我的问题。
关于sharepoint - Powershell:从模块调用方法后命令行应用程序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8267477/