У меня есть приведенный ниже фрагмент в PowerShell, который возвращает мне информацию, необходимую для локальных администраторов на удаленном ПК.Я пытаюсь преобразовать этот код в C #, но мне очень не повезло с ним.
$ADMINS = get-wmiobject -computername $computername -Credential $Credential -query "select * from win32_groupuser where GroupComponent=""Win32_Group.Domain='$computername',Name='administrators'""" | % {$_.partcomponent}
Я могу получить базовый wmi-запрос, работающий на c #, как показано ниже: Метод
public IEnumerable<CimInstance> WmiQuerier(CimSession session , string wmiquery)
{
try
{
string Namespace = @"root\cimv2";
IEnumerable<CimInstance> CimInstances = new List<CimInstance>();
CimInstances = session.QueryInstances(Namespace, "WQL", wmiquery);
//IEnumerable<CimInstance> CimInstances2 = CimInstances.SelectMany()
return CimInstances;
}
catch (Exception ex )
{
Console.WriteLine(ex.Message);
throw;
}
TEST
[Test]
public void CimQuery()
{
string querystring = "SELECT * FROM win32_groupuser";
Wmi wmi = new Wmi();
NetworkCredential mynetcred = new NetworkCredential("Domain\\User", "Password%");
CimCredential mycimCred = wmi.ConvertCred(mynetcred);
CimSession mySession = wmi.WmiConnection(testcomp, mycimCred);
IEnumerable<CimInstance> querierResults = wmi.WmiQuerier(mySession, querystring).Take(5).ToList();
Assert.IsInstanceOf<IEnumerable<CimInstance>>(querierResults);
}
}
Однако, когда я пытаюсь добавить любое условие Where, как у меня в коде powershell, (см. Мою попытку ниже)
"SELECT * FROM win32_groupuser Where GroupComponent = \"Win32_Group.Domain='MachineName',Name='administrators' \""
Я получаю ошибку
Microsoft.Management.Infrastructure.CimException: «Служба WS-Management не может обработать запрос.WQL-запрос недействителен.'
Что я делаю неправильно в моей строке WQL?