Установка System.Environment.CurrentDirectory
с опережением времени сделает то, что вы хотите.
Вместо того, чтобы добавлять Set-Location
в свой скрипт, вы должны установить System.Environment.CurrentDirectory
в любое время до открытия области выполнения. Он будет наследовать то, чем является CurrentDirectory, когда он открыт:
using (Runspace runspace = RunspaceFactory.CreateRunspace())
{
System.Environment.CurrentDirectory = "C:\\scripts";
runspace.Open();
using (Pipeline pipeline = runspace.CreatePipeline())
{
pipeline.Commands.Add(@".\foo.ps1");
pipeline.Invoke();
}
runspace.Close();
}
И помните, Set-Location
не устанавливает CurrentDirectory
фреймворка .net, поэтому, если вы вызываете методы .Net, которые работают в "текущем" местоположении, вам нужно установить его самостоятельно.