2017-07-17 24 views
0

在这个脚本测试的路径不工作......似乎真假结果没得到“拯救”的功能。我总是在剧本中得到错误的结果。 我不知道如何解决它。 这是脚本。PowerShell的测试路径不工作(在fuctions)

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 = "[email protected]" 
          # $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 
         } 

我得到真正的无proble, 但在执行整个脚本我总是得到错误的。

+0

记得'返回$ FileExists' –

回答

2

此功能:

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

if(controllofile) 
{ 
    write-host "Il file esiste, quindi il disco virtuale è correttamente montato nel server." 
    write-host "Termino la procedura e non faccio altro." 
} 
+0

它的工作原理!我用你的第一个解决方案... :-) – Posco

+0

我有一个小问题, while($ tentativi -le 9-或$ FileExist -eq $ true) 我想我必须使用NOR 而-not($ tentativi -le 9 -or $ FileExist -eq $ true) 是不是?我没有找到,也没有 – Posco

+0

'$ FileExist'是不会改变它自己的任何信息,你可能需要做'($ tentativi -le 9 - 或(controllofile))'在任何情况下。我的意大利语不足以破译你想要完成的事情 –