【问题标题】:How to run a powershell command in c#如何在 C# 中运行 powershell 命令
【发布时间】: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 的全部,那么你让事情变得太复杂了。

标签: c# string visual-studio 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 的答案起作用。

【讨论】:

    猜你喜欢
    • 2021-12-16
    • 2011-03-02
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2014-09-16
    相关资源
    最近更新 更多