在这个脚本中,Test-Path不起作用......似乎真假结果不会在函数中“保存”。我总是在脚本中得到错误的结果。 我不知道如何解决它。 这是剧本。
Clear-Host
# Inizio a definire le funzioni che verranno richiamate in seguito.
function controllofile #verifica se il file è presente, la variabile in uscita può essere true o false
{ $ChkFile = "C:\01\pippo.txt"
$FileExists = Test-Path $ChkFile
}
function sendmail #funzione per l'invio della mail a me
{ $login = "XXXXXXXXXX"
$password = "XXXXXXXXXX" | Convertto-SecureString -AsPlainText -Force # Inserisco la password in chiaro, non è il massimo ma non so fare altrimenti
$credentials = New-Object System.Management.Automation.Pscredential -Argumentlist $login, $password
$From = "XXXXXXXX"
$To = "XXXXXXXXX"
# $Cc = "YourBoss@YourDomain.com"
# $Attachment = "C:\temp\Some random file.txt"
$Subject = "Email Subject"
$Body = "Insert body text here"
$SMTPServer = "XXXXXXXXXXX"
$SMTPPort = "25"
Send-MailMessage -From $From -to $To -Subject $Subject `
-Body $Body -SmtpServer $SMTPServer -port $SMTPPort `
-Credential $credentials -Priority High
Write-Host "Email Inviata."
}
function montadisco #verifica se il file è presente, la variabile in uscita può essere true o false
{
#Mount-VHD -Path \\TS-453A\ISCSI-Disks\ReplicaISCSI.vhdx # Perfetto, Funzionante, disabilitato solo per test.
Write-Host "ok fatto" #comando inserito solo per essere certo che la funzione venga fatta. poi elimina
}
#Inizio dello script vero e proprio, prima di tutto parte lo transcript per i log.
Start-Transcript -Path "C:\DinamicaIT\01.ScriptPoscoPs\PoscoVHD_log\$(get-date -f yyyy-MM-dd)_Script_log.txt" -Append -Force -NoClobber
$date = Get-Date #la data mi va bene cosi e non perdo tempo per un altra formattazione
Write-Host "Script di verifica e montaggio Disco VHD v. 1.15 del 21/06/2017"
Write-Output "Oggi è il $date"
Write-Host "Inizializzo il Programma di Controllo"
Write-Host "Verifico se il file di controllo esiste ed è accessibile"
Write-Host "Il file esiste? $FileExists "
controllofile #richiamo la funzione per il controllo del file.
If ($FileExists -eq $true)
{
write-host "Il file esiste, quindi il disco virtuale è correttamente montato nel server."
write-host "Termino la procedura e non faccio altro."
}
Else
{
Write-Host "Il file di controllo non è sato trovato, procedo al montaggio tramite Mount-VHD"
$tentativi = 0 #inzio qui il ciclo do while, la procedura effettua 10 tentativi di montaggio e controllo ed invia email in ogni caso
do { montadisco; Start-Sleep -M 500; controllofile; $tentativi++ } #piccola pausa tra montaggio e controllo, dopo aumentala.
while ($tentativi -le 9 -or $FileExist -eq $true)
if ($FileExist -eq $true)
{ Write-Host "Montaggio disco virtuale completato in $tentativi tentativi, invio una mail all'amministratore per far verificare manualmente la cosa quanto prima"
}
Else { Write-Host "Non sono riuscito a montare il disco nonostante i miei $tentativi tentativi, è tassativo un controllo manule (Verifica che il nas sia ACCESO E FUNZIONANTE"}
sendmail #richiamo la funzione specificata all'inzio per l'ivio della mail
Write-Host "Ho appena inviato la mail, quindi termino la procedura."
}
Stop-Transcript
Pause
如果我把
function controllofile #verifica se il file è presente, la variabile in uscita può essere true o false
{ $ChkFile = "C:\01\pippo.txt"
$FileExists = Test-Path $ChkFile
write-host $FileExist
}
我没有问题, 但是执行整个脚本我总是假的。
答案 0 :(得分:2)
此功能:
FormControls
永远不会实际返回任何输出,也不会写入其自身范围之外的变量。将功能更改为:
function controllofile #verifica se il file è presente, la variabile in uscita può essere true o false
{
$ChkFile = "C:\01\pippo.txt"
$FileExists = Test-Path $ChkFile
}
然后像这样使用它(function controllofile #verifica se il file è presente, la variabile in uscita può essere true o false
{
$ChkFile = "C:\01\pippo.txt"
return Test-Path $ChkFile
}
部分是多余的):
-eq $true
或
$FileExists = controllofile
if ($FileExists)
{
write-host "Il file esiste, quindi il disco virtuale è correttamente montato nel server."
write-host "Termino la procedura e non faccio altro."
}