1

このスクリプトを使用して、一部のサーバーから情報を取得しようとします。私が抱えている問題は、スクリプトが何らかの形で最後のサーバー IP を「保存」するため、リスト内の次のサーバーに到達できない場合でも、前の IP から「成功」応答が返されることです。After every testを使用してみましClear-Item variable: commandたが、値が解放されないようです。

$enddate = (Get-Date).tostring("yyyyMMdd")
$filename_SRM = 'C:\Scripts\' + $enddate + '_SRM_Scan.csv'

$compArray = get-content C:\Scripts\Servers.txt 
foreach($strComputer in $compArray)
{

  $ErrorActionPreference = “SilentlyContinue”
  $ping = new-object system.net.networkinformation.ping
  $ping.send(“$strComputer”) | Where-Object{$_.Name -eq 'Address'}
  $pingreturns = $ping.send(“$strComputer”).Status

  $socket = new-object Net.Sockets.TcpClient
  $port = 135  #445
  $socket.Connect($strComputer, $port)

  $Network = Get-WMIObject -class Win32_NetworkAdapterConfiguration -Computername $strComputer | `
                    Where-Object {$_.IPEnabled -match "True"} | `
                    Select-Object -property DNSHostName,@{N="DNSServerSearchOrder";
                                                        E={"$($_.DNSServerSearchOrder)"}},
                                                        @{N='IPAddress';E={$_.IPAddress}}

  $IP = [System.Net.Dns]::GetHostAddresses(“$strComputer”)

  if ($socket.Connected) 
    { 
     $Netlogon = Get-WMIObject Win32_Service -ComputerName $strComputer | Where-Object{$_.Name -eq 'Netlogon'}
     if ($Netlogon) {

         $OS  = Get-WmiObject -class Win32_OperatingSystem -computername $strComputer
         $services =  Get-WMIObject -class Win32_Service -ComputerName $strComputer 
         "$strComputer ; $pingreturns ; connected ; $($OS.CSName) ; $($Network.IPAddress) "

       }else{ 
                "$strComputer ; $pingreturns ; WMI Unavailable ;  ; $IP"
            }
         }
if (!$socket.Connected)
   {
        echo "$strComputer ; $pingreturns ; Unable to connect ;  ; $IP"
   }

   $socket.Close()
 } 
4

1 に答える 1

0

の代わりにClear-Item <variable name>、試してみるRemove-Variable <variable name>か、代わりに構文を使用できます$variable = $null。どちらでもうまくいくはずです。

于 2013-07-09T04:43:22.697 に答える