c# - Visual Studio 2017 C# 启动 powershell 脚本

标签 c# visual-studio powershell

希望这是问这个网站新手的正确地方:)

我在 visual studio 中创建了一个用于创建新用户的 GUI。部分代码然后调用我一直用于创建用户的 Powershell 脚本。

因此 GUI 一切正常,我可以将用户添加到它创建的 CSV 文件中,然后启动 Powershell 脚本。

我遇到的问题是 Powershell 脚本的一部分加载了 exchange 2007 管理单元。出于某种原因,当通过我创建的 GUI 运行脚本时,它总是出现一个错误,说它无法找到插件。

所以基本上启动 Powershell 的代码如下。现在我根本不是编码员,所以我可能会以错误的方式进行处理,这可能会有点困惑嘿嘿:)

Process p = new Process();

p.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);

// Redirect the output stream of the child process.
p.StartInfo.CreateNoWindow = false; (false for testing)
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = false; //(false for testing)
p.StartInfo.RedirectStandardOutput = false; //(false for testing)
p.StartInfo.RedirectStandardError = false; //(false for testing)
p.StartInfo.LoadUserProfile = true;
p.StartInfo.FileName = "This points to a file on a network share" @"\\server\folder\file";

p.Start();
p.BeginOutputReadLine();

以上内容在单击按钮后发生,一旦我全部正常工作,就会输出到 GUI 中的文本框。但现在我已经禁用了那方面的东西,所以我可以看到 Powershell 中的错误。

所以Powershell中的报错信息如下

'Microsoft.exchange.management.powershell.admin' is not installed on this computer

但如果我在没有 GUI 的情况下手动运行脚本,它仍然可以正常工作。它就像 GUI 在一个封闭的环境中启动它,无法访问其运行的计算机。我可能遗漏了一些简单的东西,因为我真的不知道如何创建 C# 应用程序。

最佳答案

好的,我想我已经解决了这个问题。

我应该更好地解释我为启动 Powershell 脚本所做的工作。基本上,我使用上面的代码来启动一个 .bat 文件,无论出于何种原因,当该 bat 文件运行时它都无法运行,我会收到上述错误。

所以我用了一个小程序将bat文件转换成一个exe,并设置它总是以管理员身份运行。这解决了问题,现在脚本可以正常运行。

不知道为什么但启动 bat 文件它无法访问本地用户配置文件,因此无法加载 Powershell 交换管理单元,因为其详细信息存储在本地用户注册表中。

因此解决方案是将我的 GUI 为 Powershell 脚本启动的 bat 文件更改为 EXE 文件。不知道这是为什么,但它有效:)

谢谢 迈克尔·史密斯

关于c# - Visual Studio 2017 C# 启动 powershell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43272843/

相关文章:

c# - WPF 使用命令和事件处理程序

c# - c# 中是否有线程安全和通用的 IList<T>?

.net - 具有前置条件和后置条件的 MS 单元测试

c# - 如何在 Debug模式下关闭 Visual Studio 中的 DocFX,同时在 Release模式下处于事件状态?

powershell - 检查大型 csv 文件是否匹配 ID 需要很长时间

c# - 当 child 有错误时使 UserControl parent 无效

c# - 如何在 MassTransit 延迟后自动重试(也称为重试周期、二级重试)

c# - 首先批量重命名 Entity Framework 数据库中的类

python - 在 Windows 中自动化流程

powershell - -确认:$false set as global setting