Get-DstInfo | Windows Yaz Saati Uygulaması için Kontrol Aracı

Güncel: Bakanlar kurulunun bundan sonra sürekli yaz saatinde devam edileceği yönünde aldığı karar sonrası 30 ekim 2016 tarihine kadar Windows’lar üzerinde yapılması gerekenlerle ilgili şuraya bakabilirsiniz.

8 Kasım 2015 04:00‘a ertelenen Yaz Saati Uygulaması için 25 Ekim 2015 04:00‘a kadar yüklenmesi gereken KB3093503 numaralı hotfix’i ve üzerine kontrol edilmesi gereken ayarları biliyorsunuz. Muhtemelen bu işlemleri otomatikleştirmek için hazırladığım toplu yükleme aracını da biliyorsunuz. Peki ortamınızda hala gerekli ayarları ve hotfix’i almamış bilgisayarlar olup olmadığını biliyor musunuz? Veya Pazartesi günü ofise geldiğinizde bazı bilgisayarların saatinin geri kaldığını fark ettiniz, peki ortamda başka hangi bilgisayarların saati geri kalmış olabilir?

get-dst-info

Bu iş için hazırladığım Get-DstInfo.ps1 isimli script’i kullanarak Windows XP ve Windows Server 2003’ler de dahil olmak üzere ortamdaki tüm Windows’lar için aşağıdaki bilgileri kolayca toplayabilirsiniz.

  • İşletim sistemi sürümü
  • Local Time (o anki zaman bilgisi)
  • Time Zone (seçişi olan Time Zone bilgisi)
  • DST (DST değişikliğini hangi tarihte uygulayacağı bilgisi)
  • KB3093503 (Bu hotfix’in yüklü olup olmadığı bilgisi)

Pazar sabahı öncesinde ortamdaki Windows’lar için son durumu görmek ve Pazar sabahı sonrasında beklenmedik bir durum ortaya çıkarsa hızlıca kimlerin zaman bilgisinin geri kaldığını öğrenmek için kullanabilirsiniz.

Get-DstInfo.ps1 Script’i Nasıl Kullanılır?

Runtime Environment için ön gereksinimler

Script’i çalıştıracağınız sunucu üzerinde aşağıdaki gereksinimleri sağlayın.

  • Şart değil ancak runtime environment olarak (yani script’i çalıştıracağınız sunucu) mümkünse bir Windows Server 2012 R2 tercih edin. Aynı zamanda Windows Server 2012, Windows Server 2008 R2 de desteklenir.
  • Runtime environment görevi üstlenen bunu sunucu üzerinde, uzak sistemlerde yönetici (administrators) yetkisine sahip bir hesap ile oturum açın. Tasarım gereği alternatif credentials girme şansı olmadığı için Active Directory Domain ortamında kullanmanızı öneririm. Tek bir hesap, tüm uzak bilgisayarlar üzerinde yetkili olmalı.
  • Disk üzerinde bir folder oluşturun; mesela C:\Source
  • 2kb’lık Get-DstInfo.zip dosyasını buradan indirin ve C:\Source altına kopyalayın.
  • bilgisayar-listesi.txt dosyasını aşağıdakilere dikkat ederek oluşturun ve C:\Source altına kopyalayın.
    • Dosya ismi mutlaka bilgisayar-listesi.txt olmalı.
    • bilgisayar-listesi.txt içerisinde sunucu isimleri kullanabileceğiniz gibi IP adreslerine de yer verebilirsiniz. Her ikisi aynı anda da kullanılabilir.
    • Sunucu adreslerini alt alta yazın, her bir satırdan tek sunucu olsun ve isim veya ip adreslerinin sonunda boşluk olmasın. Ayrıca dosyada boş satır yer almasın.

Şart değil ama eğer Get-DstInfo.ps1’i Control Panel > Region > Format > Tuksih (Turkey) ayarlı bir sunucuda çalıştırırsanız, zaman bilgisi çıktıları Türkiye formatıyla uyumlu görüntülenir.

Install-DstHotfix.ps1’den farklı olarak bu sefer herhangi bir hotfix dosyasına veya PsExec.exe aracına ihtiyaç yok.

Bilgileri toplanacak uzak bilgisayar için ön gereksinimler

  • Script’in çalıştırıldığı yetkili hesap ile eşleşen Active Directory Domain üyeliği.
  • Antivirus ve Firewall gibi güvenlik katmanlarının WMI tabanlı uzaktan erişimi engellemeyeceğinden emin olun.
  • Uzaktan raporlama için desteklenen işletim sistemi sürümleri:
    • (32-bit) Windows XP, Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10
    • (32-bit) Windows Server 2003, Windows Server 2008
    • (64-bit) Windows XP, Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10
    • (64-bit) Windows Server 2003, Windows Server 2003 R2, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2

Script’i Çalıştırma

1) Henüz indirmediyseniz Get-DstInfo.ps1 isimli script dosyasını aşağıdaki bağlantı üzerinden indirin.

Get-DstInfo.ps1 zip dosyası indirme bağlantısı

İndirmeden göz atmak isterseniz yaklaşık 180 satırdan oluşan bu Scirpt’in içeriği aşağıda yer alıyor.

#
#
# Windows Local Time, Time Zone, DST, KB3093503 icin Uzaktan Raporlama Araci
#
# Hazırlayan : Serhat AKINCI
# Geri Bildirim : serhatakinci@gmail.com
# Blog : http://serhatakinci.com
# TW : @serhatakinci
# Oluşturma Tarihi : 24.10.2015
# Sürüm : v01
# Kullanım Klavuzu : http://www.serhatakinci.com/index.php/get-dstinfo-windows-yaz-saati-uygulamasi-icin-kontrol-araci.html
#
#

[array]$computerList = Get-Content .\bilgisayar-listesi.txt
$outputArray1 = @()
$startDTM = Get-Date
$itemCount = 1
$sCount = $fCount = 0

function Get-DST
{
param([parameter(Mandatory=$true)][string]$Computer)

$currentYear = (Get-Date).Year
$winLocalTime = Get-WmiObject -ComputerName $Computer -Class Win32_LocalTime
$winTimeZone = Get-WmiObject -Class Win32_TimeZone -ComputerName $Computer

Switch ($winTimeZone.StandardMonth)
{
1 {$stdMonth = “January”}
2 {$stdMonth = “February”}
3 {$stdMonth = “March”}
4 {$stdMonth = “April”}
5 {$stdMonth = “May”}
6 {$stdMonth = “June”}
7 {$stdMonth = “July”}
8 {$stdMonth = “August”}
9 {$stdMonth = “September”}
10 {$stdMonth = “October”}
11 {$stdMonth = “November”}
12 {$stdMonth = “December”}
}

[DateTime]$stdDate = “$stdMonth 01, $currentYear $($winTimeZone.StandardHour)`:00:00”

$i = 0
while ($i -lt $winTimeZone.StandardDay)
{
if($stdDate.DayOfWeek -eq $winTimeZone.StandardDayOfWeek)
{
$i++
if($i -eq $winTimeZone.StandardDay)
{
$changeDate = $stdDate
}
else
{
$stdDate = $stdDate.AddDays(1)
}
}
else
{
$stdDate = $stdDate.AddDays(1)
}
}

if($changeDate.Month -ne $winTimeZone.StandardMonth)
{
$changeDate = $changeDate.AddDays(-7)
}

if($winTimeZone.Caption -eq $null)
{
$outTimeZone = $winTimeZone.StandardName
}
else
{
$outTimeZone = ($winTimeZone.Caption).Replace(“,”,” -“)
}

if($changeDate -eq $null){$changeDate = “Alinamadi”}
else{$changeDate = $changeDate.DateTime}
if($outTimeZone -eq $null){$outTimeZone = “Alinamadi”}
if($winLocalTime -eq $null){$outLocalTime = “Alinamadi”}
else{$outLocalTime = (Get-Date -Day $winLocalTime.Day -Month $winLocalTime.Month -Year $winLocalTime.Year -Hour $winLocalTime.Hour -Minute $winLocalTime.Minute -Second $winLocalTime.Second).DateTime}

Return $outLocalTime, $outTimeZone, $changeDate
}

Write-Host “”
Write-Host “###############################################################################” -ForegroundColor Yellow
Write-Host “”
Write-Host “Windows Local Time, Time Zone, DST, KB3093503 icin Uzaktan Raporlama Araci v01” -ForegroundColor Yellow
Write-Host “”
Write-Host “Desteklenen isletim sistemleri:
Windows XP, Vista, 7, 8, 8.1, 10 (32bit/64bit)
Windows Server 2003, 2003 R2, 2008, 2008 R2, 2012, 2012 R2 (32bit/64bit)” -ForegroundColor Yellow
Write-Host “”
Write-Host “Hazirlayan: Serhat AKINCI | Geri bildirim: serhatakinci@gmail.com” -ForegroundColor Yellow
Write-Host “”
Write-Host “###############################################################################” -ForegroundColor Yellow
Write-Host “”
Write-Host “$($computerList.count) bilgisayar icin Local Time, Time Zone, DST ve KB3093503 bilgileri aliniyor…” -ForegroundColor Cyan

foreach($Computer in $computerList)
{
if($osInfo = gwmi -ComputerName $Computer -Class Win32_OperatingSystem -EA SilentlyContinue -ErrorVariable $gwmiERR)
{
# Basarili
$Time = Get-DST -Computer $Computer

$HotFix = Get-HotFix -ComputerName $Computer -EA SilentlyContinue | ?{$_.HotFixID -eq “KB3093503”}

if($HotFix)
{
$outHotFix = “Yuklu”
}
elseif($HotFix -eq $null)
{
$outHotFix = “Yuklu Degil”
}
else
{
$outHotFix = “Bilinmiyor”
}

$charger1 = @{
‘Bilgisayar’ = $Computer
‘Isletim Sistemi’ = $osInfo.Caption
‘Local Time’ = $Time[0]
‘Time Zone’ = $Time[1]
‘DST’ = $Time[2]
‘KB3093503’ = $outHotFix
‘Aciklama’ = “Getrime islemi basarili.”
}

$customObj1 = New-Object PSObject -Property $charger1
$outputArray1 += $customObj1
$sCount++
$itemCount++
$customObj1 | select ‘Bilgisayar’,’Isletim Sistemi’,’Local Time’,’Time Zone’,’DST’,’KB3093503′

}
else
{
$charger1 = @{
‘Bilgisayar’ = $Computer
‘Isletim Sistemi’ = “Alinamadi”
‘Local Time’ = “Alinamadi”
‘Time Zone’ = “Alinamadi”
‘DST’ = “Alinamadi”
‘KB3093503’ = “Alinamadi”
‘Aciklama’ = “Getrime islemi basarisiz: $($Error[0].Exception.Message)”
}

$customObj1 = New-Object PSObject -Property $charger1
$outputArray1 += $customObj1
$fCount++
$itemCount++
$customObj1 | select ‘Bilgisayar’,’Isletim Sistemi’,’Local Time’,’Time Zone’,’DST’,’KB3093503′
}
}

$outputArray1 | select ‘Bilgisayar’,’Isletim Sistemi’,’Local Time’,’Time Zone’,’DST’,’KB3093503′,’Aciklama’ | Export-Csv operasyon-raporu.csv -NoTypeInformation -Delimiter “;” -Encoding UTF8
$elapsedTime = (Get-Date) – $startDTM

Write-Host “”
Write-Host “Istatistik:” -ForegroundColor Yellow
Write-Host “”
Write-Host “Toplam Bilgisayar : $($computerList.count)” -ForegroundColor Yellow
Write-Host “Erisilen : $($sCount)” -ForegroundColor Yellow
Write-Host “Erisilemeyen : $($fCount)” -ForegroundColor Yellow
Write-Host “Operasyon Raporu : $(Get-Location)\operasyon-kaydi.csv” -ForegroundColor Yellow
Write-Host “Script Calisma Suresi : $($elapsedTime.Hours)h $($elapsedTime.Minutes)m $($elapsedTime.Seconds)s” -ForegroundColor Yellow
Write-Host “”

2) C:\Source gibi bir dizine alın ve bilgisayar-listesi.txt isimli dosya raporlamak istediğiniz uzak bilgisayar isimlerini ekleyin.

bilgisayar-listesi

3) Ortamda yönetici yetkisindeki bir hesap ile oturum açın ve önce Execution Policy ayarını kontrol edin. Bu iş için PowerShell konsolunda Get-ExecutionPolicy yapabilirsiniz. Eğer dönen sonuç Restricted ise, Set-ExecutionPolicy RemoteSigned cmdlet’ini çalıştırarak varsayılan bir güvenlik tedbiri olan sınırlamayı kaldırabilirsiniz. Aksi halde Get-DstInfo.ps1 çalışmaz.

4) Ardından C:\Source dizinine geçip .\Get-DstInfo.ps1 | ft ile raporlama işlemini başlatın. | ft kullanırsanız konsol çıktısı liste şeklinde akar. ft parametresinin operasyon sonrasında oluşan operasyon-raporu.csv açısından herhangi bir önemi yoktur.

get-dstinfo-script-ft

 

5) Operasyon sonrasında script ile aynı dizinde operasyon-raporu.csv isimli bir çıktı oluşur. Bunu yine Excel ile açıp ufak bir biçimlendirmeden sonra tüm sonuçları detaylı olarak görebilirsiniz.

operasyon-raporu-excel

Başarı kriteriniz Excel tablosundaki DST sütunu. Hotfix’in yüklendiği ve Time Zone & DST ayarlarının sağlıklı bir şekilde uygulandığı uzak bilgisayarlar için bu sütunda 8 Kasım 2015 04:00:00 zamanı yer alır.

Sürüm Geçmişi ve Bilinen Sorunlar

Sürüm Geçmişi:

  • 24.10.2015 18:00 – v01 sürümü yayınlandı.

Umarım herkes için sorunsuz bir geçiş olur.

Yazı Etiketleri: , , , , ,

Sayfa Başı ▲

Yorum Ekle