Powershell 为什么可以';t我使用相同的Get Date变量两次,但没有得到错误的时间
我希望我的脚本在没有internet连接时将时间和日期写入日志 当执行myPowershell 为什么可以';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
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