C# 无法从out program files文件夹运行ps1脚本
我可以在桌面上完美运行此脚本:C# 无法从out program files文件夹运行ps1脚本,c#,powershell,powershell-sdk,C#,Powershell,Powershell Sdk,我可以在桌面上完美运行此脚本: private void Sleep_Click(object sender, EventArgs e) { PowerShell ps = PowerShell.Create(); ps.AddScript(@"D:\Desktop\alllightsoff.ps1"); ps.Invoke(); } 但是,当我更改程序文件的路径时,它不会起任何作用。。有什么想法吗 priv
private void Sleep_Click(object sender, EventArgs e)
{
PowerShell ps = PowerShell.Create();
ps.AddScript(@"D:\Desktop\alllightsoff.ps1");
ps.Invoke();
}
但是,当我更改程序文件的路径时,它不会起任何作用。。有什么想法吗
private void Sleep_Click(object sender, EventArgs e)
{
PowerShell ps = PowerShell.Create();
ps.AddScript(@"C:\Program Files (x86)\Home Control\alllightsoff.ps1");
ps.Invoke();
}
可能与权限有关,脚本不需要管理员权限才能运行,当我从程序文件夹手动运行ps1脚本时,一切正常
我甚至尝试了%AppData%文件夹,得到了相同的结果,ps1文件没有运行。像往常一样,在对问题的评论中提供了关键指针:
- 使用按名称或可执行文件/脚本文件路径添加命令
- 如果需要将参数传递给该命令,则必须使用该方法-请参见下面的示例
- 相比之下,使用(名称不好的)方法将一段自包含的PowerShell源代码添加为字符串,该字符串被解析为脚本块(因此该方法的更好名称应该是
).AddScriptBlock()
- 在需要传递参数的情况下,必须将它们直接嵌入源代码字符串中—请参见底部的示例
.AddCommand()
代替.AddScript()
就是解决方案:
ps.AddCommand(@"C:\Program Files (x86)\Home Control\scripts\alllightsoff.ps1");
如果你想传递一个参数,比如说-Delay 60
,你可以调用:
ps.AddParameters(new Dictionary<string, int> { ["Delay"] = 60 });
请注意文件路径周围的前导&
和“…”
如果要传递参数,例如-Delay 60
,则必须将其包含在字符串中:
ps.AddScript(
@"& 'C:\Program Files (x86)\Home Control\scripts\alllightsoff.ps1' -Delay 60"
);
所以我发现c:\test\有效,而c:\te st\无效,所以它与空格有关,我需要在c#
AddScript
->AddCommand
ps.AddScript(
@"& 'C:\Program Files (x86)\Home Control\scripts\alllightsoff.ps1' -Delay 60"
);