Powershell ничего не возвращает из C #, тот же код запускается в приглашении ps с удалением \ r \ n - PullRequest
0 голосов
/ 22 февраля 2012
string cmd = " $srv = new-object Microsoft.SqlServer.Management.Smo.Server('" + svr + "')" + Environment.NewLine;

cmd += " $srv.Logins | where-object {$_.Name -eq 'DOMAIN\server55' } | select-object 'State'" + Environment.NewLine;

Этот код добавляется между кодом PSSnapin и PSSession, затем вызывается:

util>string prep = "$hasSnapin = get-pssnapin | Select { $_.Name.toLower().Trim() = 'sqlservercmdletsnapin100' }" + Environment.NewLine;

util>prep += "if ($hasSnapin -eq $null) { Add-Pssnapin SqlServerCmdletSnapin100 }" + Environment.NewLine;

util>cmd = prep;
util>cmd = "$pssessSql = New-PSSession -ComputerName " + svr + Environment.NewLine;
util>cmd += " Invoke-Command -session $pssessSql -ScriptBlock {" + Environment.NewLine;
util>cmd += "    " + " sqlps -nologo -noprofile -command {" + Environment.NewLine;
util>cmd += "    " + command + " }" + Environment.NewLine;
util>cmd += " }" + Environment.NewLine;
util>cmd += " Remove-PSSession -Session $pssessSql" + Environment.NewLine;
util>cmd += " exit";
util>try {
util>IList<System.Management.Automation.PSObject> results = pipeline.Invoke();
util>runspace.Close();
util>return results;
util>}

Если я перехватываю скрипт, идущий в Invoke, он работает, заменяя «\ r \ n» на новую строкупочему это не работает в C #, у меня есть другие скрипты, работающие из C #, поэтому, возможно, отсутствует что-то очевидное, вот захваченный код, который запускается из приглашения ps:

$hasSnapin = get-pssnapin | Select { $_.Name.toLower().Trim() = 'sqlservercmdletsnapin100' }
if ($hasSnapin -eq $null) { Add-Pssnapin SqlServerCmdletSnapin100 }
$pssessSql = New-PSSession -ComputerName Server54
Invoke-Command -session $pssessSql -ScriptBlock {
sqlps -nologo -noprofile -command {
$srv = new-object Microsoft.SqlServer.Management.Smo.Server('Server54')
$srv.Logins | where-object {$_.Name -like 'DOMAIN\Server55$' } | select-object 'State' }
 }
 Remove-PSSession -Session $pssessSql
 exit

Спасибо за любые подсказкиУ меня были проблемы с вложенными кавычками, но я смог получить большинство из них, так что я думаю это из \ r \ n в коде, но не уверен, как это выяснить, я не могу получить результаты, возвращаемые изприложение, но весь сценарий работает нормально через приглашение ps.

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

Нашел, код в порядке, но я использовал форматирование, когда я закомментировал это, я смог получить свои результаты.До этого он возвращал объекты форматирования, но я не мог получить значения от них ... рад, что попробовал без:

query += "\r\n" + "$data = $cmdCheckLogin.ExecuteReader()";
query += "\r\n" + "$dt = new-object System.Data.DataTable";
query += "\r\n" + "$dt.Load($data)";
query += "\r\n" + "$dt";    // | format-table -hidetableheaders";
query += "\r\n" + "$conn.Close()";
0 голосов
/ 23 февраля 2012

Может ли быть проблема с загрузкой оснастки на удаленном конце?

У вас есть:

cmd = prep;
cmd = "$pssessSql ...";

, что означает, что код подготовки полностью игнорируется / перезаписывается вторым назначением. Один из вариантов - безоговорочно добавить оснастку, указав, что вы хотите, чтобы ошибки игнорировались.

Add-Pssnapin -ErrorAction SilentlyContinue SqlServerCmdletSnapin100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...