Удаленные сценарии, содержащие MotW, не содержащие MotW и ExecutionPolicy RemoteSigned, не тестируются
Я работаю с политикой Powershell как "RemoteSigned
"настроен раньше Powershell.Invoke()
выполняет. У меня есть файл сценария, содержащий MotW, который, конечно, не подписан. Все, что я хочу проверить на своей машине / на тестовом сервере, что загруженный файл удаленного сценария не должен выполняться, потому что я настроил политику как RemoteSigned.
Но я видел странное поведение. На моем локальном компьютере файл сценария (например, UnsignedRemoteScript.ps1
) правильно развертывается в моем каталоге тестов развертывания в первую очередь и содержит MotW, каким он был раньше. Но, к сожалению, сначала он не копировал в TestDirectory на других машинах. После того как я проверилEnable Deployment
' в Local.testsettings
, он начал развертываться, но MotW не остался нетронутым, как на моей машине. Вот почему тест get get терпит неудачу и на всех других машинах. Я попытался выполнить сценарий, указав путь unc path, но я не уверен, что сценарий powershell для создания пути unc является правильным или нет.
Я не знаю, в чем причина. Неправильно ли создание пути 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 path
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
Кто-нибудь может мне помочь в этом отношении