首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell测试路径不工作(在函数中)

PowerShell测试路径不工作(在函数中)
EN

Stack Overflow用户
提问于 2017-07-17 21:28:53
回答 1查看 102关注 0票数 0

在此脚本测试中,路径不起作用...似乎真和假的结果不会被“保存”在函数中。我总是在脚本中得到错误的结果。我不知道怎么修好它。这就是脚本。

代码语言:javascript
复制
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

如果我把

代码语言:javascript
复制
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
                        }

我没有遇到任何问题就得到了true,但是执行整个脚本时我总是得到false。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-17 21:33:23

此函数:

代码语言:javascript
复制
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
}

实际上不会返回任何输出,也不会写入超出其自身作用域的变量。将函数更改为:

代码语言:javascript
复制
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部分是多余的):

代码语言:javascript
复制
$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."
}

代码语言:javascript
复制
if(controllofile)
{
    write-host "Il file esiste, quindi il disco virtuale è correttamente montato nel server."
    write-host "Termino la procedura e non faccio altro."
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45145608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档