第5天因為各種資訊格式的不一樣,挨踢狗雖然沒有具體產出的進度,但在讀了不少線上文件後,也額外發現幾件事:
在教科書1中其實也有說明,但是好像天書。最後我看了原廠的另一個資源後,就會了個大概。今天的成果用到以下幾個知識點:
以 $ 給變數命名,後面接指令,$變數名 就會儲存指令所輸出的結果。
例如前一天有提到,用Get-CIMINSTANCE -Class Win32_NetworkAdapterConfiguration
可以取得網路相關的細部資訊,實際的指令是:
Get-CIMINSTANCE -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true | Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS* | Format-Table -Property IPAddress
則可以用以下方式來指定,用變數$NetDetail來存輸出的一大堆資料:
$NetDetail=Get-CIMINSTANCE -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true | Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS*
用 $變數.{property} 就可以把特定值叫出來,例如前面的例子裡,如果我們對其中一個叫IPAddress的資料感興趣,就可以用 $NetDetail.IPAddress
來叫出資料。
如果變數本身和他字屬性都是陣列型的資料,那可以用 [0..] 的方式來叫結果:
例如這裡用到的$NetDetail.IPAddress
兩個值都是矩陣;所以試用以下方式來呼叫,並觀察輸出結果的差異。
$NetDetail.IPADDRESS
$NetDetail[0].IPADDRESS
$NetDetail[0].IPADDRESS[0]
先檢查改寫果的語法是不是都是我要的資料。
得到的結果不錯:
$myDateTime="{0:yyyy-MM-dd HH.mm.ss.fff}" -f (get-date)
$HWDetail=Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object -Property [a-z]* -ExcludeProperty "CIM*"
$HWinfo="$($HWDetail.name);$($HWDetail.dOMAIN);$($HWDetail.username;)"
$NetDetail=Get-CIMINSTANCE -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true | Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS*
$NetInfo="$($NetDetail[0].IPAddress[0]);$($NetDetail[0].IPSubnet[0]);$($NetDetail[0].DefaultIPGateway);$($NetDetail[0].MACAddress);$($NetDetail[0].DNSServerSearchOrder);$($NetDetail[0].DNSHostName)"
$myDateTime
$HWinfo
$NetInfo
輸出excel file
"LogTims;PCName;Domian;UseName;IPAddress;SubnetMask;DefaultGW;MAC;DNSServer;DNS" | out-file .\Documents\myPS\asset.csv
"$myDateTime;$HWinfo;$NetInfo" | out-file .\Documents\myPS\asset.csv -Append