使用powershell脚本,我将导出存在于服务器上的所有DHCP服务器和作用域的列表。结果必须在python的第二个脚本中解析。(这是我们的监控系统)。
下面是剧本:
$DHCPServers = (Get-DhcpServerInDC).Dnsname
$Scopes = @()
$Leases = @()
foreach ($DHCPServer in $DHCPServers) {
$Scopes += Get-DhcpServerv4Scope -ComputerName $DHCPServer | select-Object @{Name="DHCPServer"; Expression = {$DHCPServer}},ScopeID,Name,StartRange,EndRange
}
$Scopes | Export-Csv -path .\DHCP_Freeleases-Scopes-get.csv -Encoding utf8 -NoTypeInformation
foreach ($Scope in $Scopes) {
$Leases += Get-DHCPServerv4Lease -ScopeId $Scope.ScopeID -ComputerName $Scope.DHCPServer | select-Object @{Name="DHCPServer"; Expression = {$Scope.DHCPServer}}, IPAddress, @{Name="LeaseExpiryTime"; Expression = {$_.LeaseExpiryTime.toString("yyyy/MM/dd/HH:mm")}}, @{Name="ScopeID"; Expression = {$Scope.ScopeID}}, Addressstate
}
$Leases | Export-Csv -path .\DHCP_Freeleases-Leases-get.csv -Encoding utf8 -NoTypeInformation
当我在本地DHCP (Windows 2012 R2)上编写该脚本时,CSV导出是我想要的方式:
"dhcp1.server.intern","10.26.9.202","2022/01/25/08:22","172.26.9.192","Active"
现在,我将脚本部署到另一台服务器(Windows 2019),完全相同的脚本给了我这个CSVline:
"dhcp1.server.intern","10.26.9.202","2022.01.25.08:22","172.26.9.192","Active"
我想要理解:这怎么可能?我以为.toString()用我的参数给出了它?
谢谢你的帮助!
发布于 2022-01-25 08:36:53
DateTime.ToString()
方法将正斜杠和冒号视为格式说明符。这意味着它们可以被特定于地区的字符替换.
来自文档
格式字符串中的"d“、"f”、"F“、"g”、"h“、"H”、"K“、"m”、"M“、"s”、"t“、"y”、"z“、":”或"/“字符被解释为自定义格式说明符,而不是文字字符。要防止字符被解释为格式说明符,可以在字符前面加上反斜杠(),即转义字符。
要强制使用固定格式,只需用反斜杠转义这些字符:
$_.LeaseExpiryTime.toString("yyyy\/MM\/dd\/HH\:mm")
正如您在注释中所指出的,您还可以使用一个预定义格式,例如's‘(ISO8601),它在定义上与地区无关:
$_.LeaseExpiryTime.toString('s')
输出看起来像2022-01-25T11:20:26
。
https://stackoverflow.com/questions/70845153
复制相似问题