我正在处理Powershell脚本,它没有正确读取我的“ If,elseIf”,所以我知道我做错了。我需要一些帮助来解决这个问题。 我先拉默认网关并存储它:
$Gateway = (Get-wmiObject Win32_networkAdapterConfiguration | ?{$_.IPEnabled}).DefaultIPGateway
下一步,我尝试对它进行排序,以便如果它等于我指定的默认网关之一,它将更新时区。
If ($Gateway = "10.100.4.1")
{
$TZ = "Central Standard Time"
}
ElseIf ($Gateway = "10.101.4.1")
{
$TZ = "Central Standard Time"
}
我正在用
完成它Set-TimeZone $TZ
目的是,如果我在家庭办公室对系统进行映像,然后将其运送到“远程位置”,则我将不信任最终用户来更新其时区,并且我的POS书写得不好,因此它不使用UTC / GMT,并且可能导致BOH系统等问题。
我将把它作为启动项放在系统启动时执行,以确保它始终与TZ保持最新。
更改Win 10以对TZ使用自动更新无法正常工作,原因是有原因的(请阅读:网络团队和安全团队不在意我,在这种情况下,这不是妄想症)。
那么,在哪里可以找到帮助以将其整合在一起? 编辑:我有一个错字,这就是为什么它不起作用。所以...没关系。对于那些对错字感兴趣的人,我已经将其删除。它在我的$ Gateway部分中,在{$ _。IPEnabled}之后和)之前添加了一个“
答案 0 :(得分:0)
您的“ if”语句使用赋值运算符=
而不是相等运算符-eq
。
将其切换为If ($Gateway -eq "10.100.4.1")
,它应该可以工作。
P.S。我错过了您提到的错字,但是赋值运算符仍然是一个问题。在“ if / elsif”语句中使用赋值运算符时,它将始终返回$true
,这将是一个很大的问题。
答案 1 :(得分:0)
我建议对指定的默认网关使用查找哈希表。
因为您希望将其作为启动脚本运行,所以还需要创建一个集中式路径,可以在其中记录错误或在Windows事件日志中写入错误。
使用指定的网关IP地址作为键,将时区ID作为值来创建哈希表。
直接在代码中
$timeZones = @{
'10.100.4.1' = 'Central Standard Time'
'10.101.4.1' = 'Central Standard Time'
'10.102.4.1' = 'Eastern Standard Time'
# etc.
}
或者通过读取带有“ IPAddress”和“ TimeZone”列的集中式CSV文件
$defaultTz = Import-Csv -LiteralPath '\\Server\Share\Folder\Timezones.csv'
$timeZones = @{}
$defaultTz | ForEach-Object {
$timeZones[$_.IPAddress] = $_.TimeZone
}
接下来,使用这些值,如下所示(演示使用集中式错误日志文件):
$errorlog = '\\Server\Share\Folder\TimezonesErrors.log'
$now = (Get-Date).ToString() # use default format or specify the date format yourself here
$currentTz = (Get-TimeZone).Id # get the current timezone Id
# get the default gateway IPv4 address for this computer
$gw = @((Get-wmiObject Win32_networkAdapterConfiguration | Where-Object {$_.IPEnabled -and $_.DefaultIPGateway-like '*.*.*.*'}).DefaultIPGateway)[0]
# check if the gateway IP address is present in the lookup Hashtable
if ($timeZones.ContainsKey($gw)) {
$tz = $timeZones[$gw]
# only set the wanted timezone if it differs from the current timezone
if ($tz -ne $currentTz) {
try {
Set-TimeZone -Id $tz -ErrorAction Stop
}
catch {
# add the exception to the error log
$msg = "$now - Error setting the timezone on computer $($env:COMPUTERNAME): $_.Exception.Message"
Add-Content -LiteralPath $errorlog -Value $msg
}
}
}
else {
# make it known that the IP address for this gateway was not found in the Hashtable
$msg = "$now - No timezone found for default gateway $gw on computer $($env:COMPUTERNAME)"
# write error to the central error.log file
Add-Content -LiteralPath $errorlog -Value $msg
}