Powershell未从C#返回任何内容,相同的代码在ps提示符下运行,\r\n';删除
该代码添加在PSSnapin和PSSession代码之间,然后调用:Powershell未从C#返回任何内容,相同的代码在ps提示符下运行,\r\n';删除,c#,powershell,C#,Powershell,该代码添加在PSSnapin和PSSession代码之间,然后调用: 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'" + Envi
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;
感谢您提供的任何线索,我在使用嵌套引号时遇到了问题,但我能够获得其中的大部分,因此我认为这是从代码中的\r\n中得到的,但不确定如何找到答案,我无法从应用程序返回结果,但整个脚本通过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
这意味着准备代码被第二次赋值完全忽略/覆盖。
一种替代方法是无条件地添加管理单元,指定希望忽略错误
cmd = prep;
cmd = "$pssessSql ...";
找到它,代码很好,但是我使用了格式,当我评论说我能够得到我的结果时。在此之前,它返回格式化对象,但我无法从中获取值。。。很高兴我没有:
Add-Pssnapin -ErrorAction SilentlyContinue SqlServerCmdletSnapin100
Get-PSSnapin
采用一个-name
参数,该参数采用区分大小写的通配符。因此,您可以将get-pssnapin | select…
替换为get-pssnapin-name sqlserver*100
。感谢Stephen,在帖子之间捕捉到了这一点,但可能没有那么感谢您发现它。
Add-Pssnapin -ErrorAction SilentlyContinue SqlServerCmdletSnapin100
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()";