Windows で、サーバーを介して日付と時刻を更新する場合、この変数はどこに保存されますか?
この変数をチェックする必要がある PowerShell スクリプトを作成していますが、データを取得する方法がわかりません。
Windows で、サーバーを介して日付と時刻を更新する場合、この変数はどこに保存されますか?
この変数をチェックする必要がある PowerShell スクリプトを作成していますが、データを取得する方法がわかりません。
レジストリから情報を取得できるはずです。これ:
$key = 'HKLM:\SYSTEM\CurrentControlSet\services\W32Time\Parameters'
$enabled = switch ((Get-ItemProperty $key).Type) {
{ 'NTP','NT5DS','AllSync' -contains $_ } { $true }
'NoSync' { $false }
default { throw "Invalid type value $_." }
}
switch
ステートメントの代わりにハッシュテーブルを使用することもできます。
$types = @{
'NTP' = $true
'NT5DS' = $true
'AllSync' = $true
'NoSync' = $false
}
$key = 'HKLM:\SYSTEM\CurrentControlSet\services\W32Time\Parameters'
$enabled = $types[(Get-ItemProperty $key).Type]
Windows タイム サービスのドキュメントによると、Type
エントリには 4 つの異なる値があり、そのうちの 3 つは同期が有効になっていることを示していることに注意してください。
Google からの最初のリンク「powershell get ntp settings」
ここにコードを貼り付けます (Jeff Wouters の功績)
function Get-TimeServer {
<#
.Synopsis
Gets the time server as configured on a computer.
.DESCRIPTION
Gets the time server as configured on a computer.
The default is localhost but can be used for remote computers.
.EXAMPLE
Get-TimeServer -ComputerName "Server1"
.EXAMPLE
Get-TimeServer -ComputerName "Server1","Server2"
.EXAMPLE
Get-TimeServer -Computer "Server1","Server2"
.EXAMPLE
Get-TimeServer "Server1","Server2"
.NOTES
Written by Jeff Wouters.
#>
[CmdletBinding(SupportsShouldProcess=$true)]
param (
[parameter(mandatory=$true,position=0)][alias("computer")][array]$ComputerName="localhost"
)
begin {
$HKLM = 2147483650
}
process {
foreach ($Computer in $ComputerName) {
$TestConnection = Test-Connection -ComputerName $Computer -Quiet -Count 1
$Output = New-Object -TypeName psobject
$Output | Add-Member -MemberType 'NoteProperty' -Name 'ComputerName' -Value $Computer
$Output | Add-Member -MemberType 'NoteProperty' -Name 'TimeServer' -Value "WMI Error"
$Output | Add-Member -MemberType 'NoteProperty' -Name 'Type' -Value "WMI Error"
if ($TestConnection) {
try {
$reg = [wmiclass]"\\$Computer\root\default:StdRegprov"
$key = "SYSTEM\CurrentControlSet\Services\W32Time\Parameters"
$servervalue = "NtpServer"
$server = $reg.GetStringValue($HKLM, $key, $servervalue)
$ServerVar = $server.sValue -split ","
$Output.TimeServer = $ServerVar[0]
$typevalue = "Type"
$type = $reg.GetStringValue($HKLM, $key, $typevalue)
$Output.Type = $Type.sValue
$Output
} catch {
}
} else {
}
}
}
}