だから私はこれを機能させるためにぐるぐる回っています.2日間試してきましたが、それを理解することはできません.
作成されたpowershellスクリプトを受け取り、powershellで実行する必要がある次のvb関数があります。コマンド パイプラインが呼び出される時点まで、すべてが正常に機能します。この時点では、コマンドは実行されません。
ご覧のとおり、Microsoft.Exchange.Management.PowerShell.E2010 スナップインを実行空間に追加しようとしましたが、スナップインの行に沿って何かが存在しない (存在する) と述べているのがまったく好きではありませんでした。また、示されているようにコードを実行すると、有効なコマンドは認識されません。特定のコマンド「Add-PSSnapin」を追加して、Exchange スナップインを読み込んでみましたが、「Add-PSSnapin」は有効なコマンドとして認識されないと表示されます。
コマンドが呼び出される直前にプログラムを一時停止すると、パイプライン内のすべてのコマンドが正しい形式で表示されます。パイプラインのコマンド テキストをコピーして PowerShell ウィンドウに直接貼り付けると、問題なく動作します。
私のコードは以下のとおりです。どんな提案も歓迎します。
編集:「Add-PSSnapin Ex」という行も追加してみました(Exの両側にアスタリスクが付いています-これのフォーマットがわかりません、ごめんなさい)
スクリプトが最初に実行するものとして Exchange PS Snapins をロードしようとしましたが (実行空間でこれを設定するのとは対照的に)、うまくいきませんでした
Private Function scriptRunner(ByVal scripttorun As String) As String
Dim initial As InitialSessionState = InitialSessionState.CreateDefault()
Dim result As String = ""
Dim lineFromScript As String = ""
Dim reader As New StreamReader(tempScript)
Dim rsConfig As RunspaceConfiguration = RunspaceConfiguration.Create()
Dim snapInException As New PSSnapInException
Dim strUserName As String = "DOMAIN\USER"
Dim strPassword As String = "PASSWORD"
Dim SecuredPSWD As New System.Security.SecureString()
For Each character As Char In strPassword
SecuredPSWD.AppendChar(character)
Next
Dim wsmConnectionInfo As WSManConnectionInfo
Dim strSystemURI As String = "http://SERVER.DOMAIN/powershell?serializationLevel=Full"
Dim strShellURI As String = "http://schemas.microsoft.com/powershell/Microsoft.Exchange"
Dim powerShellCredentials As PSCredential = New PSCredential(strUserName, SecuredPSWD)
wsmConnectionInfo = New WSManConnectionInfo(New Uri(strSystemURI), strShellURI, powerShellCredentials)
Dim runspace As Runspace = RunspaceFactory.CreateRunspace(wsmConnectionInfo)
Runspace.Open()
' runspace.RunspaceConfiguration.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", snapInException)
Dim pipeLine As Pipeline = runspace.CreatePipeline()
Dim command As Command = New Command("")
' TEST >> pipeLine.Commands.Add("Add-PSSnapin *Ex*")
Do While reader.Peek() <> -1
lineFromScript = Nothing
lineFromScript = reader.ReadLine()
pipeLine.Commands.Add(lineFromScript)
'command.Parameters.Add(lineFromScript)
'pipeLine.Commands.Add(command)
Loop
'' Run the contents of the pipeline
Dim psObjCollection As Collection(Of PSObject) = pipeLine.Invoke()
runspace.Close()
runspace.Dispose()
Return ""
End Function