Skip to main content

· 2 min read

Microsoft Azure üzerinde bulunan sanal makinalarınıza bağlanmak için, Management Portal üzerinden indirdiğiniz Remote Desktop File dosyalarını tek tek indirmek yerine yazmış olduğum Powershell fonksiyonu ile istediğiniz bir dizin içerisine ve indirdiğiniz Remote Desktop File dosyaları içerisinde kullanıcı adınızı gönderme şansınız bulunmaktadır.

Save-AzureRDPFile -SavePath C:\AzureVMFolder

Save-AzureRDPFile -SavePath C:\AzureVMFolder -UserName bilgeadam.com\Hasan.Gural

Function Save-AzureRDPFile{ <# .Synopsis This function provide downloading the Remote Desktop file of Virtual Machine on Azure .DESCRIPTION When you execute that function, it provide create the Remote Desktop File of Virtual Machine on Azure in what you select path. SavePath parameter must be specified as mandatory. Optional Account can add into Remote Desktop file with Username Parameter .EXAMPLE Save-AzureRDPFile -SavePath C:\AzureVMFolder Save-AzureRDPFile -SavePath C:\AzureVMFolder -UserName adatum.com\Hasan.Gural #> Param( [Parameter(Mandatory=$True)] [string]$SavePath, [string]$UserName ) $VerbosePreference = "Continue" $TestPath = Test-Path -Path $SavePath -ErrorAction SilentlyContinue if($TestPath -eq $true){ Write-Host "The Directory way found. - We're good to go." -ForegroundColor Green $AllVM = Get-AzureVM foreach($vm in $AllVM){ $Name = $vm.Name try{ Write-Verbose "Remote Desktop File creating... Virtual Machine name is $Name" $SaveFile = Get-AzureRemoteDesktopFile -ServiceName $vm.ServiceName -Name $vm.Name -LocalPath "$SavePath\$Name.rdp" -ErrorAction Stop -ErrorVariable Err Write-Verbose "Client VM RDP file ($Name.rdp) downloaded to $SavePath" Add-Content $SavePath\$name.rdp -Value username:s:$Username} catch{ Write-Host "Remote Desktop File could not be created" $Err | Out-File C:\RdpLogFile.txt
Write-Host "Log file is created C:\RdpLogfile.txt" } } Write-Host " " Write-Host "All remote desktop files created. Saved path:>>$SavePath" -ForegroundColor Green } else { Write-Host " " Write-Host "The Directory path not found" -ForegroundColor Red -BackgroundColor White Write-Host " "} }

Save-AzureRemoteDesktopFile2

· 3 min read

Azure içerisindeki çeşitli işlemlerinizi gerçekleştirmek için Windows Powershell kullanabilirsiniz. Azure ile ilgili cmdlet'leri kullanmak istiyorsak Azure Powershell modülünü kurmamız gerekmektedir. Azure ile ilgili cmdlet'leri kullanarak, Azure üzerinde aldığınız tüm hizmetlerinizi yönetebilirsiniz. Örnek verecek olursak; Sanal Makine oluşturma, Web Sitesi yönetme, Storage Account, Cloud Services, Resource Manager,Windows Azure Pack vd.

Microsoft Web Platform Installer yükleyerek Azure Powershell modülünü yükleyebilirsiniz. Web Platform Installer şu Link adresten erişebilirsiniz.

İlgili adresten indirme işlemini tamamladıktan sonra, Web Platform Installer çalıştırılır.

Daha sonra ise, karşımıza Install etmek için bir onay bilgisi gelir. Bu kısmı da kabul ederek geçiyorum.

"Install" tıklanır ve kurulum işlemi bittikten sonra, Windows Azure Powershell açılır, dilerseniz Windows Powershell içerisinden "Import-Module Azure" diyerek Azure ile ilgili cmdletlere erişebilirsiniz..

Yüklemiş olduğunuz Azure Module bilgilerini görmek için;

Get-Module –Name Azure | Select-Object Version,Name,Author

Azure hesabıma nasıl bağlanabilirim ?

Azure ile ilgili cmdlet'leri kullanmak için Azure hesabınızı Windows Powershell içerisinde eklemeniz gerekmektedir. Azure hesabınızı Windows Powershell içerisine eklemek için iki yolumuz bulunmaktadır. Windows Powershell ile Azure hesabınızı yönetebilmek için sertifika yada Azure hesabınızı yönetmiş olduğunuz Microsoft Account (Account-Based) ile Windows Powershell eklemeniz gerekmektedir. Eğer Microsoft Account ile eklerseniz, Azure Active Directory tarafından size bir Access token verilerek Azure Powershell cmdtlerlerini kullanmaya başlayabilirsiniz.

Bu yöntemlerden önerilen Account-Based yöntemini kullanmak, başlıca sebepleri içerisinde Azure Resource Manager API içerisine sertifika tabanlı erişim ile ulaşamamaktadır. Certificate-Based erişimler ise daha zor yönetilen olarak gözükmektedir. Subscription ve sertifikanın geçerlilik süresi boyunca Powershell üzerinden Azure hesabınıza bağlanmaya devam edeceksiniz fakat farklı kullanıcılar için yönetim oldukça zor olacaktır.

Account-Based bağlanma yöntemi

Windows Powershell içerisinde, "Add-AzureAccount" cmdlet yazıp çalıştırdığımız zaman karşımıza Sign in penceresi gelecektir. Bu ekranda ilgili hesaplar girilir ve Windows Powershell içerisine Azure hesabı eklenmiş olur.

Hesabınızı başarılı bir şekilde girdikten sonra, aşağıdaki gibi bir sonuç görmem gerekiyor. Id, kısmında Account-Based olarak yaptığım erişim için hesabımın adı yazmaktadır. Dilerseniz mevcut hesaplarınızı "Get-AzureAccount" komutu ile listeleyebilirsiniz.

Powershell ile Azure bağlanmak için Account-Based yöntemini kullandık. Azure hesabınızı eklediğimiz zaman bize Access token verdiğinden bahsetmiştik. Bu profil detayları Appdata\Romaing\WindowsPowershell içerisinde tutulmaktadır.

Powershell üzerinden Azure içerisine göndereceğiniz komutlar için bu TokenCache.Dat dosyasını kullanarak Credentials bilgileriniz önbellek alınmış durumdadır. AzureProfile içerisinde de eklemiş olduğunuz Account bilgileri yer almaktadır. Eğer bu TokenCache.dat silerseniz, Powershell üzerinden tekrar hesabınızı bağlanmanız gerekmektedir.

Certificate-Based bağlanma yöntemi

Sertifika bazlı bağlanmak için Windows Powershell içerisinde "Get-AzurePublishingSettingFile" cmdlet çalıştırarak sizi Azure Management Portal üzerinde özel bir sayfaya yönlendirecektir. Daha sonra o aşamada bir sertifika oluşturup size, ".publishsettings" uzantılı dosya verecektir. Bu dosyanın adı şu şekilde oluşmaktadır.

"SUBSCRİPTİONName-Date-credentials. publishsettings" olarak indirilmektedir. Örnek olarak;

İndirmiş olduğumuz Azure PublishSettingsFile dosyamı Powershell içerisine çağırarak user bazında bir sertifika oluşmasını sağlayacak ve bu sertifika sayesinde Powershell içerisinden Azure hesabımı yönetebileceğim. "PublishSettingsFile" dosyamı powershell içerisine çağırmak için kullanacağım cmdlet "Import-AzurePublishSettingsFile" ve ilgili dosyanın path belirtmek olacaktır.

Import-AzurePublishSettingsFile C:\BilgeAdam-1-5-2015.credentials.publishsettings

İlgili hesap eklendi ve user bazında bir sertifika eklendi. Bu sertifikanın ve subscription geçerli olduğu sürece Azure hesabıma bağlanıp ilgili cmdlet'ler üzerinde çalışmalar yapabileceğim. Dilerseniz sertifikayı erişimi kapatabilirsiniz.

Powershell ile Azure hesabımı bağladıktan sonra, Azure üzerindeki sanal makinalarımı görmek için birkaç cmdlet yazarak sonuçlarına göz gezdirelim. Örnek olarak;

"Get-AzureVM" cmdlet çalıştırarak Azure üzerinde bulunan sanal makinalarımı listeledim.

· 2 min read

Bir önceki yazımızda Powershell 5.0 ile gelen yeniliklerden bahsetmiştik. Yazımıza ilgili link üzerinden ulaşabilirsiniz.

Powershell 5.0 (Windows Management Framework 5.0 Preview) İnceleme Yazısı

Bu yazımızda Powershell 5.0 ile gelen sıkıştırılmış klasörlerimizi yönetmek için kullanacağımız iki adet Cmdlet üzerinden kullanımlarına örnek veriyor olacağız.

Sıkıştırılmış dosyalarımızı yönetmemiz için kullandığımız command-lets aşağıdaki gibidir.

  • Compress-Archive
  • Expand-Archive

Compress-Archive komutu ile biz belirli bir dizin içerisindeki dosyalarımızı sıkıştırabiliriz. Bu komutun "-Path" parametresi ile sıkıştırma işlemine tabi tutmak istediğiniz dosyaların yolunu göstermeniz gerekmektedir. Bununla beraber "-DestinationPath" parametresi kullanmamız gerekiyor sıkıştırılan dosyaların kaydedileceği yeri belirler. Son olarak ise "-CompressionLevel" parametresi üç adet değer almaktadır. Kısaca bunlara göz gezdirelim.

Fastest ile işlem süresini azaltmak için mevcut en hızlı sıkıştırma yöntemini kullanırız fakat bu seçim bize büyük dosya boyutlarına neden olabilir.

NoCompression ile belirtmiş dosyalar üzerinde herhangi bir sıkıştırma yapmaz.

Optimal ile belirtmiş olduğumuz dosyaların sıkıştırılma süresi boyuta bağlıdır.

Not : Bu Parametre zorunlu değildir. Default olarak "Optimal" belirlenmiştir.

Expand-Archive komutu ile sıkıştırılmış dosyalarımızı dışarıya çıkarmayı sağlamaktadır. Bu komutun "-Path" parametresi içerisine sıkıştırılmış dosyalarımızı göstermemiz gerekmektedir. Bununla beraber "-DestinationPath" parametresi ile sıkıştırılmış dosya içerisindeki verilerin nereye çıkartacağımızı belirtiriz.

Kullanım örneklerine biraz inceleyelim, diskimin içerisinde bulunan C:\ZIPFolder içerisinde aşağıdaki şekilde bir çok dosya tipi ve farklı boyutları bulunmaktadır. Bu dosyaların sıkıştırılması için örnek komut;

Compress-Archive –Path C:\ZIPFolder –DestinationPath C:\ZIPFolder\Archive.zip

Çalıştırdıktan sonra sıkıştırma işlemleri sürüyor.

Bittikten sonra, komut içerisinde belirtmiş olduğum dosya yolu içerisinde sıkıştırılmış dosyayı görmekteyim.

Farklı bir örnek ile bahsetmek istiyorum. Gördüğünüz gibi klasör içerisinde farklı formatlar var ve ben bu formatlar içerisinden sadece ".txt" uzantılı olan dosyalarımı sıkıştırma işlemine yapmak istiyorum. Bunun için aşağıdaki örnek size yol gösterecektir.

Son olarak sıkıştırılmış dosyalarımızı nasıl dışarı çıkartabiliriz ile ilgili örnek aşağıdaki gibidir.

Expand-Archive –Path C:\ZIPFolder\Archive.zip –DestinationPath C:\ZIPFolder\Expand

Sonuç aşağıdaki gibidir

· One min read

Hemen hemen farklı yazılım dili ile uğraşanların kenarından bir şekilde uğraştığını bildiğim döviz kurlarını TCMB üzerinden artık powershell ile aşağıdaki yazdığım fonksiyonu kullanarak bakabilirsiniz. TCMB üzerinden günlük döviz kurlarını artık sadece "Get-ExchangeRates" yazarak listeleyebilirsiniz.

Function Get-ExchangeRates { $xml = New-Object xml $xml.Load(‘http://www.tcmb.gov.tr/kurlar/today.xml’) $xml.Tarih_Date.Currency | Where-Object {$PsItem.BankNoteBuying -ne ""} | Select-Object @{n='Para Birimi';e={$PsItem.CurrencyCode}}, @{n='Tarih';e={(get-Date -Format "d/MM/yyyy")}}, @{n='Efektif Alış';e={$PsItem.BankNoteBuying}}, @{n='Efektif Satış';e={$PsItem.BankNoteSelling}} }

Get-ExchangeRates

ExchangeRates

· 2 min read

Yapınız da bulunan bilgisayarlarınızın statik ip yapılandırması olduğunu varsayalım. Statik ip olarak kullanılan tüm bilgisayarların TCP-IP yapılandırmasını otomatik olarak yapılandırmak istiyorsunuz. Bunun için işinizi kolaylaştıracak Powershell fonksiyonu tam size göre, bu fonksiyon sayesinde ister Bilgisayar isimlerini belirtin isterseniz Active Directory üzerinden bir "Organization Unit" belirterek ilgili kod bloğunu çalıştırın. Eğer ortamda ulaşamadığınız makinalar olur ise size bir log dosyası yaratıyor.

function Set-AutomaticIPAddress {
<#
.Synopsis
Yazılan fonksiyon ile otomatik ip ve dns adresi alınması sağlanır.
.DESCRIPTION
Bu fonksiyon ile şirket içerisinde bulunan Static IP ve DNS adresi kullanan bilgisayarlarınıza,
WMI üzerinden otomatik IP ve DNS adresi alınması sağlanır.
Alınan hata kodları ile ilgili sayfaya bakınız;
http://msdn.microsoft.com/en-us/library/aa390378(v=vs.85).aspx
.EXAMPLE
Set-AutomaticIPAdress -ComputerName hasangural,Cnolan
Aşağıdaki örnek ile Active Directory cmdlet kullanılarak bilgisayar isimleri spesifik bir OU üzerinden getirilir.
Set-AutomaticIPAdress -ComputerName (Get-ADComputer -Filter \* -SearchBase "OU=BA,dc=hasan,dc=com" |
Select-Object -ExpandProperty Name
#>
param
(
\[Parameter(Mandatory=$True)\]
\[string\[\]\]$ComputerName
)
foreach($Name in $ComputerName) {
try {
$wmi = Get-WmiObject -Class win32\_networkadapterconfiguration -Filter "ipenabled ='true'" -ComputerName $Name -ErrorAction Stop -ErrorVariable Err
$Result = $wmi.EnableDHCP()
$result2 = $wmi.SetDNSServerSearchOrder()
if($Result.ReturnValue -eq 0) {
Write-Host "$Name adlı bilgisayarların IP Adresi başarıyla otomatik olarak yapılandırıldı." }
else { Write-Host "Hata Alındı. Hata Kodu:" $Result.ReturnValue -ForegroundColor Red }
if($result2.ReturnValue -eq 0) {
Write-Host "$Name adlı bilgisayarların DNS Adresi başarıyla otomatik olarak yapılandırıldı."}
else { Write-Host "Hata Alındı. Hata Kodu:" $Result2.ReturnValue -ForegroundColor Red }
}
catch {
Write-Host "$Name adlı bilgisayara bağlanılamadı.Detaylı hatalar için C:Log.txt bakınız." -ForegroundColor Red -BackgroundColor White
$Err | Out-File C:Log.txt }
}
}

Kullanım örnekleri aşağıdaki gibidir.

Set-AutomaticIPAdress -ComputerName hasangural,Cnolan

Active Directory üzerinden spesifik bir "Organization Unit" içerisinden getirmek için ise aşağıdaki örnek size yol gösterecektir.

Set-AutomaticIPAdress -ComputerName (Get-ADComputer -Filter \* -SearchBase "OU=BA,dc=hasan,dc=com" |
Select-Object -ExpandProperty Name

AutomaticAdress2 AutomaticAdress

· One min read

Merhabalar,  Şirketinizde kim hangi çözünürlük kullanıyor ? Sorusunun cevabını almak istiyorsanız, aşağıdaki powershell fonksiyonu tam size göre.

Function Get-Resolution { <# .Synopsis Bilgisayarınızın çözünürlük detaylarını verir. .DESCRIPTION Bu fonksiyon ile uzaktaki bilgisayarların çözünürlük,hertz,model gibi bilgileri kolayca erişebilirsiniz. .EXAMPLE Get-Resolution -ComputerName hasangural,CNolan Get-Resolution -ComputerName (Get-ADComputer -Filter * -Searchbase "OU=HG,dc=hasan,dc=com" | Select-Object -ExpandProperty Name ) #> param ( [Parameter(Mandatory=$True)] [string[]]$ComputerName ) Write-Verbose "Bilgisayara bağlanıyor. $ComputerName" foreach ($Name in $ComputerName){ try { Get-WmiObject -Class Win32_VideoController -ComputerName $Name -ErrorAction Stop | Where-Object {$PsItem.MaxRefreshRate -ne $null} | Select-Object @{n="Bilgisayar Adı";e={$PsItem.PsComputerName}}, @{n="Mevcut Hertz";e={$PsItem.CurrentRefreshRate}}, @{n="Çözünürlük";e={$PsItem.CurrentHorizontalResolution.ToString() + "x" + $PsItem.CurrentVerticalResolution.ToString()}}, @{n="Marka / Model";e={$PsItem.Name}} } catch { Write-Host "$Name adlı bilgisayara bağlanılamadı" } }
}

Resolution

· 2 min read

Merhabalar, Dosya sistemleri üzerinde bir çok kez tekrarlanan işlemleri kısaltmak adına yazdığım powershell fonksiyonu ile şirketinizdeki bilgisayarlarınızın uzaktan disklerinde kullandıkları dosya sistemlerini değiştirebilirsiniz. Yapmanız gereken sadece disk sürücü harfini belirtip bilgisayar isimlerini vermek.

Function Convertto-NTFS { <# .Synopsis Bu fonksiyon ile disk yapınızda kullandığınız dosya sistemini FAT32 üzerinden NTFS dönebilirsiniz. .DESCRIPTION Yazılan bu fonskiyonun şirket ortamınızdaki clientlarınızın uzaktan FAT32 dosya sistemini NTFS çevirme şansına sahipsiniz. Ortamda bulunan clientların PSRemoting özelliğinin açık olması gerekmektedir. .EXAMPLE Convertto-NTFS -DriveLetter F -ComputerName hasangural,cnolan Convertto-NTFS -DriveLetter F -ComputerName (Get-Content C:\ComputerList.txt) Dilerseniz Active Directory cmdletleri ile OU Bazlı filtrelemer yaparak bilgisayar isimlerini getirebilirsiniz. Convertto-NTFS -DriveLetter F -ComputerName (Get-ADComputer -Filter * | Select-Object -ExpandProperty Name) #> param ( [Parameter(Mandatory=$True)] [string]$DriveLetter, [string[]]$ComputerName ) foreach ($Name in $ComputerName) { if (!(Test-Path \\$Name\$DriveLetter$)){ Write-Host ”Sürücü harfi $DriveLetter bulunamadı.” -ForegroundColor Red -BackgroundColor White } else { $WMIDriveLetter = $DriveLetter + ":" Write-Verbose "$Name adlı bilgisayara bağlanılmaya çalışıyor." $GetDrive = Get-WmiObject -Class Win32_LogicalDisk -ComputerName $Name -Filter "DeviceId='$WMIDriveLetter'" $LabelName = $GetDrive.VolumeName $FileSystemType = $GetDrive.FileSystem if ($FileSystemType -eq 'NTFS'){ Write-Host "$Name adlı bilgisayarın dosya sistemi NTFS olarak tespit edilmiştir." -BackgroundColor Red } else { Write-Host “Dönüştürme işlemi yapılacak olan sürücünün Volume Adı:$LabelName” Invoke-Command -ComputerName $Name -ScriptBlock { param ([string]$RemoteLabel,$RemoteDriveLetter) $RemoteLabel | C:\Windows\System32\convert.exe $RemoteDriveLetter /FS:NTFS /X} -ArgumentList $LabelName,$WMIDriveLetter} } } }

ConverttoNTFS

ConverttoNTFS1

· One min read
Hasan Gural

Merhabalar, Powershell ile WMI sorgulaması yaparak aşağıda yazdığım fonskiyonu kullanarak şirketinizdeki bilgisayarlarınızın BIOS detaylarını öğrenebilirsiniz. Fonksiyon içerisinde "Example" kısmında örnek kullanımlarını yazdım.


function Get-LenovoBiosDetails {
<#
.Synopsis
Bu fonksiyon aşağıda listelenmiş "Lenovo" markaları cihazlarınızın BIOS detaylarını vermektedir.
• R400, R500
• T400, T400s, T410, T410s, T420, T420i, T420s, T420si
• T500, T510, T520, T520i
• W500, W510, W520, W700, W700ds, W701
• X200, X200s, X200 Tablet, X201, X201s, X220, X220i, X220 Tablet, X220i Tablet
• X301
.EXAMPLE
Get-LenovoBiosDetails -ComputerName hasangural,notebook
Get-LenovoBiosDetails -ComputerName (Get-Content c:\\Computerlist)
#>
[CmdletBinding()]
param(
#\[Parameter(Mandatory=$true)\]
[string[]]$ComputerName
)
Write-Verbose "Bilgisayara bağlanıyor. $ComputerName"
foreach($Name in $ComputerName) {
try {
Get-WmiObject -Class Lenovo_BiosSetting -Namespace root\\wmi -ComputerName $Name -ErrorAction Stop |
Where-Object {$\_.CurrentSetting -ne ""} | Select-Object @{n="Bilgisayar Adı";e={$PsItem.PsComputerName}},
@{n="Ayar Adı";e={$PsItem.CurrentSetting.Split(",")[0]}},
@{n="Mevcut Değeri";e={$PsItem.CurrentSetting.Split(",")[1]}}
} catch {

Write-Host "$Name adlı bilgisayara bağlanılamadı"
}

}
}

Powershell üzerinden sonuç aşağıdaki gibi görebilirsiniz. Bir sonraki yazımız da bu değerleri değiştirmekten bahsedeceğim.

LenovoBIOSDetails

· One min read

WordPress’e hoş geldiniz. Bu sizin ilk yazınız. Bu yazıyı düzenleyin ya da silin. Sonra blog dünyasına adım atın!