Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell C#WMI为InvokeMethod正确填充输入对象_C#_Powershell_Wmi_Ndis - Fatal编程技术网

PowerShell C#WMI为InvokeMethod正确填充输入对象

PowerShell C#WMI为InvokeMethod正确填充输入对象,c#,powershell,wmi,ndis,C#,Powershell,Wmi,Ndis,我在将PowerShell脚本翻译为C#时遇到问题 我正在关注这篇文章,并试图将示例PowerShell重写为C#。。更准确地说,我在正确地将Get-NdisObjectHeader、Get-NdisWmiHeader转换为inParams时遇到了一个问题。首先是PS代码,然后是我在C#中的失败代码 PowerShell: $Adapters = Get-WmiObject -Namespace root\wmi -Class` MSNdis_ReceiveScaleCapabilities;

我在将PowerShell脚本翻译为C#时遇到问题

我正在关注这篇文章,并试图将示例PowerShell重写为C#。。更准确地说,我在正确地将Get-NdisObjectHeader、Get-NdisWmiHeader转换为inParams时遇到了一个问题。首先是PS代码,然后是我在C#中的失败代码

PowerShell:

$Adapters =  Get-WmiObject -Namespace root\wmi -Class` MSNdis_ReceiveScaleCapabilities;

## $Adapters[4];
## under 4.element I’ve got my desired adapter InstanceName: „Adapter 0”

function Get-NdisObjectHeader 
{ 
    param( 
        $revision = 1, 
        $type     = 0x02, 
        $size     = 0xffff 
    ) 
    $hdr = ([wmiclass]'root\wmi:MSNdis_ObjectHeader').CreateInstance() 
    $hdr.Revision      = $revision 
    $hdr.Type          = $type 
    $hdr.Size          = $size 
    return $hdr 
}

function Get-NdisWmiHeader 
{ 
    param($timeout = 5) 
    $whdr = ([wmiclass]'root\wmi:MSNdis_WmiMethodHeader').CreateInstance() 
    $whdr.Header       = Get-NdisObjectHeader 
    $whdr.PortNumber   = 0 
    $whdr.NetLuid      = 0 
    $whdr.Padding      = 0 
    $whdr.RequestId    = 0 
    $whdr.Timeout      = $timeout 
    return $whdr 
}

$whdr = Get-NdisWmiHeader;
$outParams = $Adapters[4].WmiQueryReceiveScaleCapabilities($whdr);
C#

谢谢你的帮助。
Bob

您的PowerShell代码可以翻译为:

ManagementBaseObject hdr = new ManagementClass("root\\wmi:MSNdis_ObjectHeader").CreateInstance();

hdr["Revision"] = 1;
hdr["Type"] = 0x02;
hdr["Size"] = 0xffff;

ManagementBaseObject whdr = new ManagementClass("root\\wmi:MSNdis_WmiMethodHeader").CreateInstance();

whdr["Header"] = hdr;
whdr["PortNumber"] = 0;
whdr["NetLuid"] = 0;
whdr["Padding"] = 0;
whdr["RequestId"] = 0;
whdr["Timeout"] = 5;

// Two lines bellow are taken from Bob's answer
ManagementBaseObject inParams = AdapterInstance.GetMethodParameters("WmiQueryReceiveScaleCapabilities");

inParams["Header"] = whdr;

ManagementBaseObject outParams = AdapterInstance.InvokeMethod("WmiQueryReceiveScaleCapabilities", inParams, null);
编辑:必须通过
ManagementClass.GetMethodParameters
创建
ManagementBaseObject
类型的实例以存储参数。并且此
ManagementBaseObject
必须传递给
InvokeMethod
。在PowerShell中,这是在调用方法时由
ManagementObjectAdapter
隐式完成的


我的失误被@bob0123发现。所以也请支持他的答案。

对于完全工作的代码,我在Yoh Deadfall版本中又添加了两行代码(感谢您的提示!):


您遇到了什么异常?能否将完整异常(类型、消息、堆栈)添加到您的问题中?另外,至少在C#版本中,您似乎缺少一些代码,“inParams”是在哪里创建的?inParam->whdr-fixedin行:whdr[“Header”]=NDISWmiHeader;调试器停止程序并抛出“ManagementException was unhandled”(管理异常未处理)消息和视图详细信息..-{“类型不匹配”}有意义,但在最后一行:ManagementBaseObject outParams=AdapterInstance.InvokeMethod(“WmiQueryReceiveScaleCapabilities”,whdr,null);我得到了未处理的管理异常:{“未找到”}(错误代码:System.Management.ManagementStatus.NotFound)。。我很困惑,因为这意味着我的AdapterInstance没有WmiQueryReceiveScaleCapabilities?,但在PowerShell上一切正常,嗯。。
ManagementBaseObject hdr = new ManagementClass("root\\wmi:MSNdis_ObjectHeader").CreateInstance();

hdr["Revision"] = 1;
hdr["Type"] = 0x02;
hdr["Size"] = 0xffff;

ManagementBaseObject whdr = new ManagementClass("root\\wmi:MSNdis_WmiMethodHeader").CreateInstance();

whdr["Header"] = hdr;
whdr["PortNumber"] = 0;
whdr["NetLuid"] = 0;
whdr["Padding"] = 0;
whdr["RequestId"] = 0;
whdr["Timeout"] = 5;

// Two lines bellow are taken from Bob's answer
ManagementBaseObject inParams = AdapterInstance.GetMethodParameters("WmiQueryReceiveScaleCapabilities");

inParams["Header"] = whdr;

ManagementBaseObject outParams = AdapterInstance.InvokeMethod("WmiQueryReceiveScaleCapabilities", inParams, null);
ManagementBaseObject hdr = new ManagementClass("root\\wmi:MSNdis_ObjectHeader").CreateInstance();
                    hdr["Revision"] = 1;
                    hdr["Type"] = 0x02;
                    hdr["Size"] = 0xffff;

ManagementBaseObject whdr = new ManagementClass("root\\wmi:MSNdis_WmiMethodHeader").CreateInstance();
                    whdr["Header"] = hdr;
                    whdr["PortNumber"] = 0;
                    whdr["NetLuid"] = 0;
                    whdr["Padding"] = 0;
                    whdr["RequestId"] = 0;
                    whdr["Timeout"] = 5;

ManagementBaseObject inParams =  AdapterInstance.GetMethodParameters("WmiQueryReceiveScaleCapabilities");
inParams["Header"] = whdr;

ManagementBaseObject outParams = AdapterInstance.InvokeMethod("WmiQueryReceiveScaleCapabilities", inParams, null);