2016-07-12 19 views
0

我有下面的腳本在PowerShell中5運行良好新物體上的PowerShell 2失敗,構造沒有發現錯誤

$NetworkChange = New-Object System.Net.NetworkInformation.networkchange 
 

 
Register-ObjectEvent -InputObject $NetworkChange -EventName NetworkAddressChanged -SourceIdentifier "NetworkChanged" -Action { 
 

 
    Write-Host "network switched" 
 
    [email protected](Get-WmiObject win32_networkadapter -filter "netconnectionstatus = 2" | Where-Object {$_.netconnectionid -like "*Local Area Connection*"}) 
 

 
    If($LanConnected){ 
 
     Get-WmiObject win32_networkadapter -filter "netconnectionstatus = 2" | Where-Object {$_.netconnectionid -like "*Wireless Network Connection*"} | ForEach-Object {$_.disable()} 
 
    } 
 

 
    Else { 
 
     Get-WmiObject win32_networkadapter | Where-Object {$_.netconnectionid -like "*Wireless Network Connection*"} | ForEach-Object {$_.enable()} 
 
    } 
 

 
}

但是它的PowerShell 2失敗,並與下面的錯誤新對象cmdlet

New-Object : Constructor not found. Cannot find an appropriate constructor for type System.Net.NetworkInformation.networkchange. 
 
At line:1 char:11 
 
+ New-Object <<<< System.Net.NetworkInformation.networkchange 
 
    + CategoryInfo   : ObjectNotFound: (:) [New-Object], PSArgumentException 
 
    + FullyQualifiedErrorId : CannotFindAppropriateCtor,Microsoft.PowerShell.Commands.NewObjectCommand

任何想法爲什麼它失敗? PowerShell 2上的New-Object cmdlet有不同的語法嗎?

注意:我們的莊園仍然在PowerShell 2上,因此這場鬥爭。 在此先感謝

史蒂夫

+0

得到它了。它看起來像在PowerShell 2中,我必須直接將類型傳遞給Register-ObjectEvent的對象引用。因此,前兩行將是$ NetworkChange = [System.Net.NetworkInformation.networkchange] Register-ObjectEvent -InputObject $ NetworkChange -EventName NetworkAddressChanged -SourceIdentifier「NetworkChanged」--Action { – Steve

回答

0

在PS5工作的這段代碼:

$NetworkChange = [System.Net.NetworkInformation.NetworkChange]::new() 

PS2說[System.Net.NetworkInformation.NetworkChange] doesn't contain a method named 'new'.所以我們可以去圍繞它通過創建一個變量 '經典' 的方式:

New-Variable -Name NetworkChange -Value ([System.Net.NetworkInformation.NetworkChange]) 
$NetworkChange 
相關問題