0

私は c# の新しい powershell スクリプトです。Powershell スクリプト ファイル ps.ps1 と powershell 設定ファイル ConsoleSettings.psc1 があります。

C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -psconsolefile "D:\e\ConsoleSettings.psc1" -noexit -command ". 'D:\e\ps.ps1'"

実行して「

Get-RST -SearchRoot 'erd/user' -PasswordNeverExpires:$false -PasswordNotChangedFor 60 -有効

私の関数は正しく結果を出します。

今、私はこの結果を c# で取得したいと考えています。私のコードは;

    private void button1_Click(object sender, EventArgs e)
        {
            RunScript(LoadScript(@"d:\e\ps.ps1"));
        }


        private string RunScript(string scriptText)
        {
            PSConsoleLoadException x = null; ;
            RunspaceConfiguration rsconfig = RunspaceConfiguration.Create(@"d:\e\ConsoleSettings.psc1", out x);
            Runspace runspace = RunspaceFactory.CreateRunspace(rsconfig);
            runspace.Open();
            RunspaceInvoke runSpaceInvoker = new RunspaceInvoke(runspace);
            runSpaceInvoker.Invoke("Set-ExecutionPolicy Unrestricted");
            Pipeline pipeline = runspace.CreatePipeline();
            pipeline.Commands.AddScript(scriptText);

            pipeline.Commands.Add("Get-RST -SearchRoot 'erd/user' -PasswordNeverExpires:$false -PasswordNotChangedFor 60   -enabled");            
Collection<PSObject> results = pipeline.Invoke();

            runspace.Close();
            StringBuilder stringBuilder = new StringBuilder();
            foreach (PSObject obj in results)
            {
                stringBuilder.AppendLine(obj.ToString());
            }
            return stringBuilder.ToString();
        }

        private string LoadScript(string filename)
        {
            try
            {
                using (StreamReader sr = new StreamReader(filename))
                {
                    StringBuilder fileContents = new StringBuilder();
                    string curLine;
                    while ((curLine = sr.ReadLine()) != null)
                    {
                        fileContents.Append(curLine + "\n");
                    }
                    return fileContents.ToString();
                }
            }
            catch (Exception e)
            {
                string errorText = "The file could not be read:";
                errorText += e.Message + "\n";
                return errorText;
            }

        }

そして、エラーがあります。「Get-RST -SearchRoot 'erd/user' -PasswordNeverExpires:$false -PasswordNotChangedFor 60 -enabled」という用語は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認してから再試行してください。

この問題を解決する方法、または c# で (Get-RST -SearchRoot 'erd/user' -PasswordNeverExpires:$false -PasswordNotChangedFor 60 -enabled) のような configfile パラメーターを使用して powershell スクリプトを呼び出す方法

私を助けてください...

4

1 に答える 1

0

コマンドラインをスクリプトではなくコマンドとして追加しています。コマンドは、パラメーターのないコマンドレットや関数などを対象としています。追加のメソッドを使用してパラメーターを追加します。簡単な解決策は、AddScriptもう一度使用することです。

pipeline.AddScript("Get-RST -SearchRoot 'erd/user' -PasswordNeverExpires:$false -PasswordNotChangedFor 60   -enabled");   
于 2012-08-22T19:19:32.020 に答える