C# 如何在c中运行powershell命令#

C# 如何在c中运行powershell命令#,c#,string,visual-studio,powershell,C#,String,Visual Studio,Powershell,因此,我试图更改C#中文本文件的创建日期。用户将输入文件的创建日期,然后将文本文件创建日期更改为用户输入的日期。问题是,它不断添加“由于某种原因导致错误消息,它正在调用Powershell来完成此操作: public partial class Form6 : Form { public Form6() { InitializeComponent(); } private void text

因此,我试图更改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 HResult=0x8013151 Message=术语“Get-ChildItem C:\encryptedmessagehere.txt |%{$\u0.CreationTime='06/12/12 09:27:03 AM'}”未被识别为cmdlet、函数、脚本文件或可操作程序的名称。请检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试


谢谢。

首先,您需要使用
PowerShell.AddScript
方法,而不是
PowerShell.AddCommand
方法

其次,您可以尝试以下
Powershell
代码来更改文件的创建时间

(Get-ChildItem d:\Test\new.txt).CreationTime =  '2020/09/23'
最后,您可以尝试下面的c代码示例在c中调用powershell代码


Get-ChildItem
“有没有办法阻止它在末尾添加“at-end?”据我所知,这只是错误消息中的一个分隔符。不是实际命令字符串的一部分。谢谢,我刚刚试过。问题仍然存在,在结尾添加了“谢谢。真的有必要为此使用PowerShell吗?”?是否有什么东西阻止了您使用
FileInfo
对象并使用它来更新日期?如果在这个解决方案中,您使用PowerShell的唯一目的就是使用datetime格式,那么您将事情弄得太复杂了。@Keiferly,我很高兴听到您的问题已经解决,您可以单击'✔' 把我的回答记为回答。
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");
        }