PowerShell测试路径不起作用(在功能中)

时间:2017-07-17 13:28:53

标签: powershell

在这个脚本中,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
                        }

我没有问题, 但是执行整个脚本我总是假的。

1 个答案:

答案 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."
}