如何在 C# 中运行 powershell 命令
Posted
技术标签:
【中文标题】如何在 C# 中运行 powershell 命令【英文标题】:How to run a powershell command in c# 【发布时间】:2021-01-08 06:31:41 【问题描述】:所以我试图在 C# 中更改文本文件的创建日期。用户将输入文件的创建日期,然后它将文本文件的创建日期更改为用户输入的日期。问题是它出于某种原因不断添加 ' 导致错误消息,它正在调用 Powershell 来完成此操作:
public partial class Form6 : Form
public Form6()
InitializeComponent();
private void textBox1_TextChanged(object sender, EventArgs e)
private void button1_Click(object sender, EventArgs e)
string dir = textBox1.Text;
PowerShell ps = PowerShell.Create();
ps.AddCommand("Get-ChildItem c:\\encryptedmessagehere.txt | % $_.CreationTime = '"+ dir + "'");
ps.Invoke();
麻烦的是,在 "'"); 之后,它会自动添加另一个 ',从而使 powershell 命令更改日期不正确。有没有办法阻止它在末尾添加 '?
返回的错误是:
System.Management.Automation.CommandNotFoundException H结果=0x80131501 消息=术语“获取 - ChildItem C:\encryptedmessagehere.txt | % $_.CreationTime = '06/12/12 09:27:03 AM' ' 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。
谢谢。
【问题讨论】:
Get - ChildItem
Get-ChildItem,没有任何空格。
“有没有办法阻止它在末尾添加 '?” 据我所知,这只是错误消息中的分隔符。不是实际命令字符串的一部分。
谢谢,我刚试过。问题仍然存在,在末尾添加 ',谢谢。
真的有必要为此使用 PowerShell 吗?有什么东西阻止您使用 FileInfo
对象并使用它来更新日期吗?
如果日期时间格式是你在这个解决方案中使用 PowerShell 的全部,那么你让事情变得太复杂了。
【参考方案1】:
首先,您需要使用Powershell.AddScript
方法而不是Powershell.AddCommand
方法。
其次,你可以试试下面的Powershell
代码来改变文件的创建时间。
(Get-ChildItem d:\Test\new.txt).CreationTime = '2020/09/23'
最后,你可以试试下面的c#代码示例,在c#中调用powershell代码。
private void button1_Click(object sender, EventArgs e)
string datetime= textBox1.Text;
PowerShell ps = PowerShell.Create();
string script = string.Format("(Get-ChildItem d:\\New.txt).CreationTime = '0'", datetime);
ps.AddScript(script);
ps.Invoke();
MessageBox.Show("Test");
【讨论】:
@KeiferBly,很高兴听到您的问题已经解决,您可以点击“✔”将我的回复标记为答案。【参考方案2】:如果有人想知道,您需要安装以下 NuGet 包才能在 C# 中使用 PowerShell:
Microsoft.PowerShell.SDK System.Management.Automation感谢我如何让 Jack J Jun 的答案起作用。
【讨论】:
以上是关于如何在 C# 中运行 powershell 命令的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PowerShell 或 C# 中获取进程的命令行信息
c# - 如何在运行时从模块代码中获取 PowerShell 模块版本
从 C# 运行 Exchange Powershell 命令
如何在 C# 中解析 powershell 样式的命令行参数 [重复]