Vb.net 从.NET应用程序运行带if条件的Powershell脚本

Vb.net 从.NET应用程序运行带if条件的Powershell脚本,vb.net,powershell,file-io,if-statement,Vb.net,Powershell,File Io,If Statement,我有一个.net应用程序,它成功地运行它从文本文件中提取的Powershell命令,直到我尝试执行一个更复杂且包含if条件的命令。该脚本可以从PS控制台正常工作,但在.NET中,我只知道如何为脚本传入字符串,在读取文件后,它会添加额外的内容,如vblf,即使我将其取出,也不会工作。这可能吗 .NET运行时错误:服务器无法处理请求。-->这个 术语“False”不能识别为cmdlet、函数、, 脚本文件或可操作程序。检查名称的拼写,或 如果包含路径,请验证路径是否正确,然后重试 .NET代码: “

我有一个.net应用程序,它成功地运行它从文本文件中提取的Powershell命令,直到我尝试执行一个更复杂且包含if条件的命令。该脚本可以从PS控制台正常工作,但在.NET中,我只知道如何为脚本传入字符串,在读取文件后,它会添加额外的内容,如vblf,即使我将其取出,也不会工作。这可能吗

.NET运行时错误:服务器无法处理请求。-->这个 术语“False”不能识别为cmdlet、函数、, 脚本文件或可操作程序。检查名称的拼写,或 如果包含路径,请验证路径是否正确,然后重试

.NET代码:

“从文本(.ps1)文件中获取Powershell脚本
strScript=File.ReadAllText(脚本文件名)
'将参数插入脚本中
strScript=插入参数(strScript,参数)
'打开运行空间并创建管道(如果尚未打开)
如果psRunspace.RunspaceStateInfo.State=RunspaceState.BeforeOpen,则
psRunspace.Open()
如果结束
Dim MyPipeline As Pipeline=psRunspace.CreatePipeline()
MyPipeline.Commands.AddScript(strScript)
Dim psResults As Collection(PSObject的)=MyPipeline.Invoke()
Powershell脚本,存储在ps1文件中:

new-mailbox -name $argument1 -DisplayName $argument1 -UserPrincipalName $argument2 Room -DomainController $argument5
if ($argument4 -eq "False") {
   Set-CalendarProcessing $argument1 -BookingWindowInDays 400 -DeleteSubject $false -AutomateProcessing autoaccept -AllBookInPolicy $false -BookInPolicy $argument3 -DomainController $argument5        
} else {
   Set-CalendarProcessing $argument1 -BookingWindowInDays 400 -DeleteSubject $false -AutomateProcessing autoaccept -AllBookInPolicy $true -DomainController $argument5
}
当读入此脚本时,下面是一个子字符串,该字符串包含被拉入strScript的内容:

-Room -DomainController mcexdct1" & vbLf & "if (False -eq "False") {"

通过从以下位置更改PowerShell脚本修复了此问题:

if ($argument4 -eq "False") {
为此:

if ("$argument4" -eq "False") {

它是用引号括起来的。我想我在脚本字符串(如vblf)中看到的“垃圾”是正常的-我不太擅长从文本文件中读取内容。

你可以发布你在尝试此操作时遇到的错误吗?我用错误更新了原始帖子,然后当我查看strScript中的内容时,我意识到我的if条件才是真正的问题。我临时将它改为if(5-eq 5),然后一切正常-没有错误,新邮箱已完全创建。因此,我只需要弄清楚如何重写问题出在
InsertArguments
中,在某些情况下,由于脚本的工作,它会削减部分脚本。