我正在使用PowerShell查询远程服务器的时区。
-编辑:澄清一下,我想为掉进XY陷阱而道歉。 我有一个等待重新启动的服务器列表。 在我的列表中,我有本地时间列出的维护时段(例如 KWA - SRV - 修补 - 生产 - 周日 2:00)。 在示例中,其 (UTC+10:00) 堪培拉、墨尔本、悉尼。 这就是我迷路的地方,我正在寻找一种使用 PowerShell 从服务器获取维护窗口(周日 2:00)和时区的方法,该方法将用于生成服务器可以重新启动的本地时间。
返回标题(UTC-05:00) Eastern Time (US & Canada)
和(UTC+10:00) Canberra, Melbourne, Sydney
的gwmi -Class win32_timezone
我一直在寻找一些正则表达式来抓取非零数字,在上面的例子中,我需要返回 5 和 10。 我发现的每个示例都不是特定于PowerShell的,因此我很难使这些示例在PowerShell中工作。 此正则表达式的原因是使用Get-Date
并添加小时数来获取正确的远程时区时间。
我的尝试,在PowerShell控制台中。 有人可以帮助我处理这个正则表达式吗?
"(UTC-06:00) Central Time (US & Canada)" -replace '[^p{Nd}]'
0600
您不希望匹配非零数字。如果您替换了所有零,则只能从预期的 10 个输出中得到 1。
您正在尝试匹配小时部分。我想你可以用另一种方式得到这个,但你可以使用的一个正则表达式是匹配整个时间,但在一组中捕获小时
(gwmi -Class win32_timezone).Caption -match "(d{2}):d{2}"
$matches[1]
对于这两个示例,这将返回 05 和 10。如果需要这些值真正成为数字,请转换为[int]
。
现在,如果您打算将其用于时间操纵,您将遇到问题,因为仅数字不会给您偏移量。您还需要匹配符号。
(gwmi -Class win32_timezone).Caption -match "(.d{2}):d{2}"
[int]$matches[1]
匹配数字和前面的字符将得到符号。在示例中,转换为 [int]
将得到 -5 和 10。
使用 -replace
:
'(UTC-06:00) Central Time (US & Canada)' -replace '(UTC-(dd).+','$1' -as [int]