2

だから私はこれを機能させるためにぐるぐる回っています.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
4

1 に答える 1

0

問題を修正するのではなく、問題を回避することになりました。

スクリプト コードを vb.net アプリケーションに移動し、各行をファイルに書き込みました。

        writer.WriteLine("Add-PSSnapin *Ex*")

次に、PowerShell を介してスクリプトをアプリケーションとして読み込みました。

            Dim exeStartInfo As System.Diagnostics.ProcessStartInfo
        Dim exeStart As New System.Diagnostics.Process

        exeStartInfo = New System.Diagnostics.ProcessStartInfo("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe")
        exeStartInfo.Arguments = ("-command work\scriptbuilder.ps1")
        exeStartInfo.WorkingDirectory = "C:\ExchangeManager\"
        exeStartInfo.UseShellExecute = False
        exeStart.StartInfo = exeStartInfo
        exeStart.Start()
        exeStart.Close()

理想的ではありませんが、仕事は完了しました。

于 2012-11-16T14:33:16.963 に答える