我有一个包含大约1200个计算机名称的CSV文件,并使用[system.net.dns]::resolve()
查看哪些是在线的,哪些是离线的。
这很好用,但随着脚本变大,我不得不将它包装在一个函数中,但是现在它只读取文件的前8行,然后停止。
这是$y
的例子:
HB4440 SVSIG09 HB2645 HB5567
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
Set-PSDebug -Strict
#Function Assembling
Function Saveat ()
{
#work in progress
$Saveat = New-Object -Typename System.Windows.Forms.SaveFileDialog
$Saveat.filter = "CSV (*.csv)| *.csv"
[void]$Saveat.ShowDialog()
return $Saveat.FileName
}
function Compare ($location)
{
...
}
function whichcsv()
{
#working so far
$location = New-Object System.Windows.Forms.OpenFileDialog
$location.filter = "CSV (*.csv)| *.csv"
[void]$location.ShowDialog()
return $location.FileName
}
function Checktrough ($y , $Filter,$Saveworking,$SaveFailed)
{
Write-Host "Function Start"
foreach($n in $y)
{
try {
$Computer = [system.net.dns]::resolve($n.$Filter) | Select HostName,AddressList
$IP = ($Computer.AddressList).IPAddressToString
Write-Host $n.$Filter $IP
New-Object PSObject -Property @{IPAddress=$IP; Name=$n.$Filter} | Export-Csv $Saveworking -NoTypeInformation -Append
} catch {
Write-Host "$($n.$Filter) is unreachable."
New-Object PSObject -Property @{Name=$n.$Filter} | Export-Csv $SaveFailed -NoTypeInformation -Append
}
}
Write-Host "Function end"
}
#Select which option Form
#region Initiate Form
...
#endregion
#Formclosed
...
#Select path of the CSV
$csvpath = whichcsv
#Choosed Options
$x = $listBox.SelectedItem
switch ($x)
{
#Option 1
"AS400 Computer"
{
...
}
#Option 2
"AS400 Personalstamm"
{
...
}
#Option 3
"ADComputer"
{
#work in progress
$CSV = Import-Csv -Path $csvpath -Delimiter ','
$y = $CSV | Select Name
$Filter = "Name"
$Saveworking = Saveat
$SaveFailed = Saveat
Checktrough ($y , $Filter,$Saveworking,$SaveFailed)
}
#Option 4
"ADBenutzer"
{
...
}
}
}
答案 0 :(得分:2)
您打电话给`Checkthrough'只填充第一个参数,因为您在告诉PowerShell创建数组的参数之间使用逗号。经验法则:自定义函数的行为类似于cmdlet,因此将它们称为cmdlet。
让我演示一下类似的功能:
function Foo($a,$b,$c)
{
Write-Host "a = '$a'"
Write-Host "b = '$b'"
Write-Host "c = '$c'"
}
$myArray = @("X","Y","Z")
Write-Host "*** First call (OK)"
Foo $myArray "Hello" "World"
Write-Host "*** Second call (OK)"
Foo -a $myArray -c "World" -b "Hello"
Write-Host "*** Third call (Oops)"
Foo ($myArray,"Hello","World")
Write-Host "*** Same withouf braces"
Foo $myArray,"Hello","World"