Автоматизировать установку драйвера DummyNET с помощью PowerShell

tl; dr пытается автоматизировать привязку драйвера / адаптера / службы адаптера с помощью PowerShell / (Set | Get) -NetAdapterBinding / PnPUtil / nvspbind

Я изучаю автоматическую установку драйвера dummynet на сетевой адаптер на Windows Server 2012 и 2012 R2.

Мне нужно автоматизировать эти шаги:

Pull up the properties for the Network Adapter that is used to access the Internet
Click "Install"
Select "Service" and click "Add"
Click "Have Disk" and navigate to webpagetest\dummynet
Select the ipfw+dummynet service (and click through any warnings about the driver being unsigned)

Я считаю, что могу добавить файлы INF драйвера в хранилище драйверов с помощью утилиты PnPUtil.

Я изучил модули PowerShell (Set | Get) -NetAdapterBinding и не могу заставить драйвер правильно зарегистрироваться.

Вот результат Get-NetAdapterBinding после того, как я установил его вручную:

PS C:\Users\Administrator> Get-NetAdapterBinding public0 -DisplayName ipfw+dummynet | format-list

Caption              : MSFT_NetAdapterBindingSettingData 'Citrix PV Network Adapter #0'
Description          : ipfw+dummynet
ElementName          : unipi_ipfw
InstanceID           : {906E5591-5C6C-4D07-BB8D-BA387BA4B646}::unipi_ipfw
InterfaceDescription : Citrix PV Network Adapter #0
Name                 : public0
Source               : 1
SystemName           : ComputerName
BindName             : Ipfw
Characteristics      : 17424
ComponentClassGuid   : {4D36E974-E325-11CE-BFC1-08002BE10318}
ComponentClassName   : Filter
ComponentID          : unipi_ipfw
DisplayName          : ipfw+dummynet
Enabled              : True
PSComputerName       :
ifAlias              : public0
InterfaceAlias       : public0
ifDesc               : Citrix PV Network Adapter #0

Get-NetAdapterBinding -Name public -DisplayName ipfw+dummynet | GM    

TypeName: Microsoft.Management.Infrastructure.CimInstance#ROOT/StandardCimv2
/MSFT_NetAdapterBindingSettingData

Name                      MemberType    Definition                             
----                      ----------    ----------                             
ifAlias                   AliasProperty ifAlias = Name                         
ifDesc                    AliasProperty ifDesc = InterfaceDescription          
InterfaceAlias            AliasProperty InterfaceAlias = Name                  
Clone                     Method        System.Object ICloneable.Clone()       
Dispose                   Method        void Dispose(), void IDisposable.Dis...
Equals                    Method        bool Equals(System.Object obj)         
GetCimSessionComputerName Method        string GetCimSessionComputerName()     
GetCimSessionInstanceId   Method        guid GetCimSessionInstanceId()         
GetHashCode               Method        int GetHashCode()                      
GetObjectData             Method        void GetObjectData(System.Runtime.Se...
GetType                   Method        type GetType()                         
ToString                  Method        string ToString()                      
BindName                  Property      string BindName {get;}                 
Caption                   Property      string Caption {get;set;}              
Characteristics           Property      uint32 Characteristics {get;}          
ComponentClassGuid        Property      string ComponentClassGuid {get;}       
ComponentClassName        Property      string ComponentClassName {get;}       
ComponentID               Property      string ComponentID {get;}              
Description               Property      string Description {get;set;}          
DisplayName               Property      string DisplayName {get;}              
ElementName               Property      string ElementName {get;set;}          
Enabled                   Property      bool Enabled {get;set;}                
InstanceID                Property      string InstanceID {get;set;}           
InterfaceDescription      Property      string InterfaceDescription {get;}     
Name                      Property      string Name {get;}                     
PSComputerName            Property      string PSComputerName {get;}           
Source                    Property      uint32 Source {get;}                   
SystemName                Property      string SystemName {get;}

Вот моя попытка Set-NetAdapterBinding с аргументами, задокументированными для этого модуля:

Set-NetAdapterBinding -Name public0 -Component unipi_ipfw -Enabled $True

Set-NetAdapterBinding : No matching MSFT_NetAdapterBindingSettingData objects
found by CIM query for instances of the
ROOT/StandardCimv2/MSFT_NetAdapterBindingSettingData class on the  CIM server:
SELECT * FROM MSFT_NetAdapterBindingSettingData  WHERE ((Name LIKE 'public0'))
AND ((ComponentID LIKE 'unipi[_]ipfw')). Verify query parameters and retry.
At line:1 char:1
+ Set-NetAdapterBinding -Name public0 -Component unipi_ipfw -Enabled $True
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (MSFT_NetAdapterBindingSettingDa
   ta:String) [Set-NetAdapterBinding], CimJobException
    + FullyQualifiedErrorId : CmdletizationQuery_NotFound,Set-NetAdapterBindin
   g

Пытаясь найти лучший способ сделать это, я также наткнулся на ссылку nvspbind и попытался использовать этот инструмент для добавления драйвера. К сожалению, я тоже не могу связать это с адаптером. Утилита просто продолжает выкладывать информацию об использовании.

Как лучше всего решить эту проблему с помощью PowerShell?


person Linuturk    schedule 15.08.2014    source источник
comment
его можно установить из командной строки?   -  person Jimbo    schedule 15.08.2014
comment
Я не использую никаких инструментов, о которых я знаю. Ближе всего к мне подошли инструменты PnPUtil и nvspbind, но я не могу заставить их добавить привязку после регистрации файлов INF в хранилище драйверов.   -  person Linuturk    schedule 15.08.2014


Ответы (2)


Я работал с коллегой, и мы нашли решение:

bcdedit /set TESTSIGNING ON    
Import-Certificate -FilePath C:\webpagetest\WPOFoundation.cer -CertStoreLocation Cert:\LocalMachine\TrustedPublisher
cd C:\webpagetest
.\mindinst.exe c:\webpagetest\agent\dummynet\64bit\netipfw.inf -i -s
Enable-NetAdapterBinding -Name private0 -DisplayName ipfw+dummynet
  1. Используйте bcdedit, чтобы включить ТЕСТИРОВАНИЕ.
  2. Затем вам необходимо импортировать сертификат, предоставленный драйвером, в хранилище сертификатов, чтобы он стал доверенным драйвером.
  3. Затем с помощью утилиты mindinst.exe < / strong>, вы можете установить драйвер как привязку сетевой службы.
  4. Затем стандартный модуль Enable-NetAdapterBinding будет работать, чтобы включить службу.
person Linuturk    schedule 18.08.2014
comment
Мне не удалось выполнить эту задачу в windows-7. Возможно, модуль NetAdapterBinding им не поддерживается, может потребоваться windows-8 или лучше. Какую ОС вы использовали? Я смог запустить mindinst.exe и увидел флажок ipfw + dummynet в пользовательском интерфейсе свойств локальной сети. Когда я попробовал список ipfw в cmd, получил эту ошибку my_socket failed 2, не могу разговаривать с модулями ядра ipfw: socket: нет такого файла или каталога. Не могли бы вы помочь мне, как я могу выполнить эту задачу в Windows-7? Спасибо в нареч. - person Kulamani; 18.10.2016

Вы упомянули, что смогли заставить это работать в Windows 2012 R2, верно? Вы использовали версию, поставляемую с WebPageTest? Какая версия WPT?

Ваши шаги сработали для нас в 2012 году (R1), но R2 дает нам следующие ошибки:

C:\webpagetest\dummynet\64bit> .\ipfw.cmd
C:\webpagetest\dummynet\64bit>set CYGWIN=nodosfilewarning
C:\webpagetest\dummynet\64bit>ipfw -q flush
  5 [main] ipfw 1896 find_fast_cwd: WARNING: Couldn't compute FAST_CWD pointer.  Please report this problem to the public mailing list [email protected]
C:\webpagetest\dummynet\64bit>ipfw -q pipe flush
  4 [main] ipfw 2944 find_fast_cwd: WARNING: Couldn't compute FAST_CWD pointer.  Please report this problem to the public mailing list [email protected]

Была ли у вас эта проблема? Читая в другом месте, что это было вызвано старой версией Cygwin, я перекомпилировал dummynet + ipfw с установленной последней версией Cygwin и сбросил его cygwin1.dll в выходной каталог. Когда я устанавливаю эту службу в стек своего сетевого адаптера, я получаю разные ошибки:

C:\webpagetest\dummynet> .\ipfw.cmd
C:\webpagetest\dummynet>set CYGWIN=nodosfilewarning
C:\webpagetest\dummynet>ipfw -q flush
my_socket failed 2, cannot talk to kernel module
ipfw: socket: No error
C:\webpagetest\dummynet>ipfw -q pipe flush
my_socket failed 2, cannot talk to kernel module
ipfw: socket: No error

Кроме того, он убивает мой DNS:

C:\> Resolve-DnsName google.com
Resolve-DnsName : google.com : No DNS servers configured for local system
person Adam Cath    schedule 09.10.2015
comment
Я видел проблемы, о которых сообщаете вы, и не думаю, что мы когда-либо придумали решение. В настоящее время мы только успеваем по графику без формирования трафика. - person Linuturk; 11.10.2015
comment
@Adam, Вы как-нибудь решили эту проблему? У меня точно такая же ошибка при попытке установить ipfw в Windows-10. Не могли бы вы мне в этом помочь? - person Kulamani; 04.10.2016