如何在 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 样式的命令行参数 [重复]

如何在 C# 中运行 New-ADComputer powershell

从 C# 异常调用的 PowerShell AddCommand