Powershell 为什么可以';t我使用相同的Get Date变量两次,但没有得到错误的时间

Powershell 为什么可以';t我使用相同的Get Date变量两次,但没有得到错误的时间,powershell,Powershell,我希望我的脚本在没有internet连接时将时间和日期写入日志 当执行myif代码时,日志文件会更新日期和时间,但当执行else代码时,如果internet停机,它会记录错误的时间 $InternetTest = { Test-Connection 192.168.8.1 -Quiet } $WebsiteTest = { $result = Test-Connection 192.168.8.101 -Quiet $D = Get-Date $Outputre

我希望我的脚本在没有internet连接时将时间和日期写入日志

当执行my
if
代码时,日志文件会更新日期和时间,但当执行
else
代码时,如果internet停机,它会记录错误的时间

$InternetTest = {
    Test-Connection 192.168.8.1 -Quiet
}
$WebsiteTest = {
    $result = Test-Connection 192.168.8.101 -Quiet
    $D = Get-Date

    $Outputreport0 = "Site is down!     $d"
    $Outputreport1 = "Site is Up!       $d"

    if ($result -ne 0) {
        $Outputreport1 | Out-File C:\Users\simeo\Desktop\WebsiteTest1\log.txt -Append
        Write-Host "Up and Running"
    } else {
        $Outputreport0 | Out-File C:\Users\simeo\Desktop\WebsiteTest1\log.txt -Append
        Write-Host "DOWN!!!!!!!!"
    }
}
$Timer1 = {
    function Start-Countdown {
        Param(
            [Int32]$Seconds = 10,
            [string]$Message = "Pausing for 10 seconds..."
        )
        foreach ($Count in (1..$Seconds)) {
            Write-Progress -Id 1 -Activity $Message -Status "Retrying in $Seconds seconds, $($Seconds - $Count) left" -PercentComplete (($Count / $Seconds) * 100)
            Start-Sleep -Seconds 1
        }
        Write-Progress -Id 1 -Activity $Message -Status "Completed" -PercentComplete 100 -Completed
    }

    Start-Countdown -Seconds 10 -Message "Local internet connection unavailable "
}
$Timer2 = {
    function Start-Countdown {
        Param(
            [Int32]$Seconds = 8,
            [string]$Message = "Pausing for 8 seconds..."
        )
        foreach ($Count in (1..$Seconds)) {
            Write-Progress -Id 1 -Activity $Message -Status "Retrying in $Seconds seconds, $($Seconds - $Count) left" -PercentComplete (($Count / $Seconds) * 100)
            Start-Sleep -Seconds 1
        }
        Write-Progress -Id 1 -Activity $Message -Status "Completed" -
        PercentComplete 100 -Completed
    }

    Start-Countdown -Seconds 10 -Message "Website is down"
}

$InternetReport = "Local internet is down    $d"

for () {
    Clear-Host

    if (&$InternetTest -ne 0) {
        Write-Host "Internet UP"
        &$WebsiteTest
        Start-Sleep -Seconds 5
    } else {
        Write-Host "Internet Down"
        $InternetReport | Out-File C:\Users\simeo\Desktop\WebsiteTest1\Link_log.txt -Append
        &$Timer
    }
}

我只知道两个日志文件中的时间和日期是正确的。

我会这样修改它。在脚本块之外有一个$d2可能会解决您的问题。也许你不小心把它放在了别的地方。我为自己的测试更改了日志路径

function InternetTest {
    Test-Connection 192.168.8.1 -Quiet -count 1 # gateway
}

function WebsiteTest {
    $result = Test-Connection microsoft.com -Quiet -count 1  # test failure, timeout 3-4 sec
    # $result = Test-Connection yahoo.com -Quiet -count 1
    $D1 = Get-Date

    $Outputreport0 = "Site is down!     $d1"
    $Outputreport1 = "Site is Up!       $d1"

    if ($result) {
        $Outputreport1 | Out-File log.txt -Append
        Write-Host "Up and Running"
    } else {
        $Outputreport0 | Out-File log.txt -Append
        Write-Host "DOWN!!!!!!!!"
    }
}

function Start-Countdown {
    Param(
        [Int32]$Seconds = 10,
        [string]$Message = "Pausing for $seconds seconds..."
    )
    foreach ($Count in 1..$Seconds) {  # watch big arrays with the .. operator
        Write-Progress -Id 1 -Activity $Message -Status "Retrying in $Seconds seconds, $($Seconds - $Count) left" -PercentComplete ($Count / $Seconds * 100)
        Start-Sleep -Seconds 1
    }
    Write-Progress -Id 1 -Activity $Message -Status "Completed" -PercentComplete 100 -Completed
}

$d2 = get-date
$InternetReport = "Local internet is down    $d2"

for($i = 1; $i -le 3; $i++) {  # trying it 3x
    if (InternetTest) {
        Write-Host "Internet UP"
        WebsiteTest
        Start-Sleep -Seconds 5
    } else {
        Write-Host "Internet Down"
        $InternetReport | Out-File Link_log.txt -Append
        start-countdown # timer
    }
}
事实上,您无法通过这种方式从脚本块(或函数)获取$d,它是一个不同的作用域:

& { $d = get-date }
$d  # unchanged

您刚刚开始,并且已经在使用匿名函数。大多数人甚至不知道它们。

我会用这种方式重新编写。在脚本块之外有一个$d2可能会解决您的问题。也许你不小心把它放在了别的地方。我为自己的测试更改了日志路径

function InternetTest {
    Test-Connection 192.168.8.1 -Quiet -count 1 # gateway
}

function WebsiteTest {
    $result = Test-Connection microsoft.com -Quiet -count 1  # test failure, timeout 3-4 sec
    # $result = Test-Connection yahoo.com -Quiet -count 1
    $D1 = Get-Date

    $Outputreport0 = "Site is down!     $d1"
    $Outputreport1 = "Site is Up!       $d1"

    if ($result) {
        $Outputreport1 | Out-File log.txt -Append
        Write-Host "Up and Running"
    } else {
        $Outputreport0 | Out-File log.txt -Append
        Write-Host "DOWN!!!!!!!!"
    }
}

function Start-Countdown {
    Param(
        [Int32]$Seconds = 10,
        [string]$Message = "Pausing for $seconds seconds..."
    )
    foreach ($Count in 1..$Seconds) {  # watch big arrays with the .. operator
        Write-Progress -Id 1 -Activity $Message -Status "Retrying in $Seconds seconds, $($Seconds - $Count) left" -PercentComplete ($Count / $Seconds * 100)
        Start-Sleep -Seconds 1
    }
    Write-Progress -Id 1 -Activity $Message -Status "Completed" -PercentComplete 100 -Completed
}

$d2 = get-date
$InternetReport = "Local internet is down    $d2"

for($i = 1; $i -le 3; $i++) {  # trying it 3x
    if (InternetTest) {
        Write-Host "Internet UP"
        WebsiteTest
        Start-Sleep -Seconds 5
    } else {
        Write-Host "Internet Down"
        $InternetReport | Out-File Link_log.txt -Append
        start-countdown # timer
    }
}
事实上,您无法通过这种方式从脚本块(或函数)获取$d,它是一个不同的作用域:

& { $d = get-date }
$d  # unchanged

您刚刚开始,并且已经在使用匿名函数。大多数人甚至不知道它们。

你能用日期输出的差异更新你的问题吗?我更新了代码。InternetReport的日期总是相同的,因为逻辑应该更清楚。你能给我们一个你想要的字符串和你得到的字符串的例子吗?$websitetest是如何运行的?这是一个脚本块,没问题。[{$outputreport 0/1 | Out文件C:\Users\simeo\Desktop\WebsiteTest1\log.txt-Append}在日志文件“Site is Up!Site is Up!07/31/2019 14:56:48”[{$InternetReport | Out文件C:\Users\simeo\Desktop\WebsiteTest1\Link_log.txt-Append}中生成正确的tiema dn日期,其中,日志每次都以相同的时间和日期更新]你能用日期输出中的差异更新你的问题吗?我更新了代码。InternetReport的日期总是相同的,因为逻辑应该更清楚。你能给我们一个你想要的字符串和你得到的字符串的例子吗?$websitetest是如何运行的?这是一个脚本块,没问题。[{$outputreport 0/1 | Out文件C:\Users\simeo\Desktop\WebsiteTest1\log.txt-Append}在日志文件“Site is Up!Site is Up!07/31/2019 14:56:48”[{$InternetReport | Out文件C:\Users\simeo\Desktop\WebsiteTest1\Link_log.txt-Append}中生成正确的tiema dn日期,其中,日志每次都以相同的时间和日期更新]#js2010非常感谢您的回答,这是我遇到的问题的解决方案,我非常感谢您的努力#你是真正的MVP#js2010非常感谢你的回答,这是我遇到的问题的解决方案,我非常感谢你的努力#你是真正的MVP