私はpowershellと開発一般には初めてです。私は、ファイルが特定のサイズを超えると連絡先にメールを送るスクリプトを書こうとしています。私は別々に働く(ファイルサイズを調べるためのものとsendmail用のファイルを生成するもの)の2つの個別の機能を持っていますが、それらを相互作用させることはできません。Powershell関数から別のPowershell関数にパラメータを渡す
CheckSize関数を実行し、変数$ ExceedsSizeが1に設定されている場合は、関数SendMailを呼び出します。そうでない場合、スクリプトは他のアクションなしで終了します。
私はフォーラムを検索しましたが、私がしていることには何も適用できませんでした。
##Check file to see if it is over a particular size and then send email once threshold is reached.
param(
[string]$SiteName = "TestSite", #Name of Site (No Spaces)
[string]$Path = "\\NetworkPath\Directory", #Path of directory to check
[int]$FileSizeThreshold = 10, #Size in MB that will trigger a notification email
[string]$Contacts = "[email protected]"
)
CLS
##Creates variable $ExceedsSize based on newest file in folder.
Function CheckSize {
IF ((GCI $Path -Filter *.txt | Sort LastWriteTime -Descending | Select-Object -first 1 | Measure-Object -property Length -sum).sum/1000000 -gt $FileSizeThreshold) {$ExceedsSize = 1}
ELSE {$ExceedsSize = 0}
Write-Host $ExceedsSize
}
Function SendMail {
Param([string]$Template, [string]$Contacts, [string]$WarnTime)
$EmailLocation = "\\NetworkPath\Scripts\File_$SiteName.txt"
#Will Generate email from params
New-Item $EmailLocation -type file -force -value "From: [email protected]`r
To: $Contacts`r
Subject: $SiteName file has exceeded the maximum file size threshold of $FileSizeThreshold MB`r`n"
#Send Email
#CMD /C "$SendMail\sendmail.exe -t < $EmailLocation"
}
を、私は完全に書き込み、ホスト$ ExceedsSizeを取り除き、 Return $ ExceedsSizeに置き換えられました。その後、あなたのIFをボトムに追加することは、完璧な意味合いを作り、私が望むように動作します。関数の出力に変数を代入することは私には起こりませんでした。 – PerfectPearl
すごくうれしいですね。もう一つの答えとして、もう一つのアプローチは 'CheckSize'の中から' SendMail'を呼び出すことです。一般的には悪い習慣では避けなければならない別の方法は、可変グローバルスコープを割り当てることです: '$ global:ExceedsSize'そして' SendMail'内の '$ ExceedsSize'の値をチェックします。 [about_scopes](https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_scopes)は読む価値があります。 – gms0ulman