PowerShellでの関数の動作を知りません。私はC++やC#のように少し試しましたが、7年前に最後に試した言語です。Powershell関数の戻り値とそれに続くreturndの使用変数
私は関数を操作しようとするので、私はその後ロードされますが、すぐに私は外の変数$場所をロードしようとされたCSVファイルの場所を決定するのはこの機能
function whichcsv(){
$location = New-Object System.Windows.Forms.OpenFileDialog
$location.initialDirectory = $initialDirectory
$location.filter = "CSV (*.csv)| *.csv"
$location.ShowDialog()
write-host $location.FileName "in Function"
}
を持っていますNULLを機能させます。
書き込みホスト文には、ファイルの絶対パスがあります。
とすぐに私はそのザイン伯領そのNULLとして右のコードも文句を言わない仕事の後functiunの外にそれをロードしようとして
...
#Select which CSV
whichcsv
...
$CSV = Import-Csv -Path $location.FileName -UseCulture
$y = $CSV | Select Inventarnummer
$Filter = "Inventarnummer"
私はC言語のようにint型メイン(無効)に自分のコードを設定しようとしました - 言語は、しかし、私はこれを処理する方法だけでなく、それが同じスコープにあったので、それはうまくいくはずでしたが、どういうわけかそれは私がコンソールプロンプトですべて取得するように動作しますが、何も起こらないでしょう
フルコード for repro
#Importend:
#This is Work in Progress and not complited work.
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
#Function Assembling
Function SaveWorkingdestination()
{
$Saveworking = New-Object -Typename System.Windows.Forms.SaveFileDialog
$Saveworking.filter = "CSV (*.csv)| *.csv"
$Saveworking.ShowDialog()
return $Saveworking
}
function Savefaileddestination()
{
$Savefailed = New-Object -Typename System.Windows.Forms.SaveFileDialog
$Savefailed.filter = "CSV (*.csv)| *.csv"
$Savefailed.ShowDialog()
return $Savefailed
}
function Compare ($location)
{
#work in progress
$CSV1 = Import-Csv -Path $location.FileName -UseCulture
$CSV2 = Import-Csv -Path $location.FileName -UseCulture
Compare-Object $CSV1 $CSV2 -property WhichColumn -IncludeEqual
return comparedfilename
}
function whichcsv(){
$location = New-Object System.Windows.Forms.OpenFileDialog
$location.initialDirectory = $initialDirectory
$location.filter = "CSV (*.csv)| *.csv"
$location.ShowDialog()
write-host $location.FileName "in Funktion"
}
function Checktrough ($y , $Filter,$Saveworking,$Savefailed)
{
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.FileName -NoTypeInformation -Append
} catch {
Write-Host "$($n.$Filter) is unreachable."
New-Object PSObject -Property @{Name=$n.$Filter} | Export-Csv $Savefailed.FileName -NoTypeInformation -Append
}
}
}
#int main (void) #doesnt working so far
#{
#Select which option Form
$form = New-Object System.Windows.Forms.Form
$form.Text = "CSV Liste"
$form.Size = New-Object System.Drawing.Size(300,300)
$form.StartPosition = "CenterScreen"
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(75,195)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(150,195)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancel"
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = "Welche CSV Liste soll geladen werden:"
$form.Controls.Add($label)
$listBox = New-Object System.Windows.Forms.ListBox
$listBox.Location = New-Object System.Drawing.Point(10,40)
$listBox.Size = New-Object System.Drawing.Size(260,20)
$listBox.Height = 150
[void] $listBox.Items.Add("AS400 Computer")
[void] $listBox.Items.Add("AS400 Personalstamm")
[void] $listBox.Items.Add("ADComputer")
[void] $listBox.Items.Add("ADBenutzer")
#Formclosed
$form.Controls.Add($listBox)
$form.Topmost = $True
$result = $form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
#Select which CSV
whichcsv
$x = $listBox.SelectedItem
switch ($x)
{
#Option 1
"AS400 Computer"
{
$CSV = Import-Csv -Path $location.FileName -UseCulture
$y = $CSV | Select Inventarnummer
$Filter = "Inventarnummer"
#SaveWorkingdestination($Saveworking)
#Export-Csv $Saveworking.FileName -NoTypeInformation -Append
}
#Option 2
"AS400 Personalstamm"
{
#not implemented yet
$y = $CSV | Select SpaltennameBzwFilter
$Filter = "Spaltennamme bzw Filter"
}
#Option 3
"ADComputer"
{
$CSV = Import-Csv -Path $location.FileName -Delimiter ','
$y = $CSV | Select Name
$Filter = "Name"
SaveWorkingdestination
Savefaileddestination
Checktrough
}
#Option 4
"ADBenutzer"
{
#not implemented yet
$y = $CSV | Select SpaltennameBzwFilter
$Filter = "Spaltenname bzw Filter"
}
}
}
#}
誰かが、共通言語をC言語のint main(void)のようなもので取得する方法や、関数から適切な復帰を得る方法を知っているかもしれません...もしまだ不確かさがあればこれにはっきりと答えて編集してください。
編集:スクリプト部分でこれまでは完全にうまくいきましたが、今ではそれに構造の問題があります。またはそれはあなたが
int main (void)
{
...
code
...
}
ええ、PowerShellのスコープとはちょっと混乱しています。まずそれについて知りませんし、C言語などのように処理しようとすると... powershellからのスコープの簡単な説明がありますか?もし質問があまりないのであれば、C言語のようにまとめてint main(void){} – Kevin
@Kevin Yeah、同様の構文を持つ基本的に異なるプログラミング環境に飛び込むことはかなり混乱する可能性があります:-) Look私のコード(2番目のブロック)の例では、 '[void](ここの文や式)'は出力を抑止する簡単な方法です。スコープについては、[ドキュメント](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes)を参照してください。 –
それは素晴らしいdocuと私は私が手掛かりを持ってcompletlyまだ1つのstructre質問が開いているまで、それはC言語のようなスクリプトでラップアップされている場合は開いているか、コードは "ハングフリー"、私は間違っていないと、これはスコープを右にシフトさせるでしょうか?だから今では無料のコードがローカルにあるかどうかは、それは関数のような "同じ範囲"になるか、私はここで間違っていますか? – Kevin