button1をクリックすると、PowerShellスクリプトを実行して現在のSQL Serverインスタンスを取得する以下のコードが実行されます。ただし、これを実行すると、結果セット(結果変数)にはPowerShellの出力からの0行がカウントされます。ネイティブのPowerShellで同じコードを実行すると、インスタンス名が3行表示されます。Powershellの結果セットがC#で取得されない
何か不足している場合は誰でも助言できますか?
private void button1_Click(object sender, EventArgs e)
{
//If the logPath exists, delete the file
string logPath = "Output.Log";
if (File.Exists(logPath))
{
File.Delete(logPath);
}
string[] Servers = richTextBox1.Text.Split('\n');
//Pass each server name from the listview to the 'Server' variable
foreach (string Server in Servers)
{
//PowerShell Script
string PSScript = @"
param([Parameter(Mandatory = $true, ValueFromPipeline = $true)][string] $server)
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force;
Import-Module SQLServer;
Try
{
Set-Location SQLServer:\\SQL\\$server -ErrorAction Stop;
Get-ChildItem | Select-Object -ExpandProperty Name;
}
Catch
{
echo 'No SQL Server Instances';
}
";
//Create PowerShell Instance
PowerShell psInstance = PowerShell.Create();
//Add PowerShell Script
psInstance.AddScript(PSScript);
//Pass the Server variable in to the $server parameter within the PS script
psInstance.AddParameter("server", Server);
//Execute Script
Collection<PSObject> results = new Collection<PSObject>();
try
{
results = psInstance.Invoke();
}
catch (Exception ex)
{
results.Add(new PSObject((Object)ex.Message));
}
//Loop through each of the results in the PowerShell window
foreach (PSObject result in results)
{
File.AppendAllText(logPath, result + Environment.NewLine);
// listBox1.Items.Add(result);
}
psInstance.Dispose();
}
}
これはWindowsフォームアプリケーションなのですか?何か他のものがあれば、何? – TravisEz13
はい、そうです。私は今、WinFormsタグを追加しました。ありがとうございます。 –
PowerShellオブジェクトの[HadErrors](https://msdn.microsoft.com/en-us/library/system.management.automation.powershell.haderrors(v = vs.85).aspx)の正当性を確認してください。本当の場合は、['Streams'](https://msdn.microsoft.com/en-us/library/system.management.automation.powershell.streams(v = vs.85).aspx)を読む必要があります。 ['.Error'](https://msdn.microsoft.com/en-us/library/system.management.automation.psdatastreams.error(v = vs.85).aspx)プロパティを開き、エラーを確認します。 CmdLetが終了していないエラーを書き込んでいる可能性があります。 – TravisEz13