我正在使用 Powershell 策略作为执行RemoteSigned
前配置的“” Powershell.Invoke()
。我有包含 MotW 的脚本文件,当然没有签名。我想在我的机器/测试服务器上测试远程脚本下载的文件不应该被执行,因为我将策略配置为 RemoteSigned。
但我看到了奇怪的行为。在我的本地机器上,脚本文件(例如UnsignedRemoteScript.ps1
)首先正确部署在我的部署测试目录中,并包含 MotW,就像它以前一样。但不幸的是,首先它没有复制到其他机器上的TestDirectory。在我检查 ' Enable Deployment
' 之后Local.testsettings
,它开始部署,但 MotW 并没有像在我的机器上那样保持完整。这就是 test get 失败的原因,这在所有其他机器上也失败了。我尝试通过指向 unc 路径方式来执行脚本,但我不确定用于制作 unc 路径的 powershell 脚本是否正确。
我不知道是什么原因。unc 路径创建不正确吗?UNC 路径与这个故事有什么关系?
遵循代码。
public void Setup()
{
var iss = InitialSessionState.CreateDefault();
iss.ExecutionPolicy = ExecutionPolicy.RemoteSigned;
var powInstance = PowerShell.Create();
}
[TestMethod]
[DeploymentItem(@"Path.......\RandomData.ps1")]
public void
ExecuteRemoteScriptWithoutSignMustOutputUnauthorizedAccessException()
{
var runRemoteScript = "...\..\RunRemoteScript.ps1"
var pipelineCommand = new Command(runRemoteScript, true);
powInstance.Commands.AddCommand(pipelineCommand);
powInstance.AddArgument(TestDeploymentDirectory);
powInstance.Invoke();
Assert.IsTrue(powInstance.Streams.Error.Any(), "Execution Policy evaluation failed. " +
"Script is not digitally signed.");
Assert.IsTrue(powInstance.Streams.Error[0].Exception != null,
"Exception not available while script execution policy evaluation");
Assert.AreEqual(powInstance.Streams.Error[0].FullyQualifiedErrorId, "UnauthorizedAccess");
StringAssert.Contains(powInstance.Streams.Error[0].Exception.Message,"digitally signed",
"Execution Policy evaluation failed." +
"Script execution policy found to be other than remote digitally signed");
}
使用 unc 路径执行远程脚本的脚本
File : RunRemoteScript.ps1
Param($remoteScriptPath)
Set-Location $remoteScriptPath
$drive = Get-PSDrive -Name (Get-location).Drive.Name
$root = if($drive.DisplayRoot -ne $null){$drive.DisplayRoot} else {$drive.Root}
$uncPath = Join-Path -Path $root -ChildPath $drive.CurrentLocation
cd $uncPath
.\RemoteUnsignedScript.ps1
有人可以在这方面帮助我吗