.

Can's Windows Server Blog

Powershell taşınabilir enrypted veri oluşturmak

Normalde convertto-securestring veya convertfrom-securestring komutları lokal userın objectini kullanarak veriyi şifreler yani aynı ağ kullanıcısıyla başka bir bilgisayara gittiğinizde ve şifreli veriyi taşırsanız artık açamazınız. taşınabilir yapmak için anahtar a ihtiyacınız var.

Ben kendi ssh anahtarımın public keyini kullandım. Benim amacıma uyuyordu çünkü tüm sistemlerimde aynı SSH anahtar ikilisini kullanıyorum ve dolayısıyla dosya eriştiğim tüm sistemler için uygun.

$veri = gc "C:\Users\$env:username\.ssh\id_rsa.pub"
$LimitedVeri = $veri -replace '\D+(\d+)','$1'
$lc16 = $LimitedVeri.Substring(0,16)
$anahtar = ($lc16[0],$lc16[1],$lc16[2],$lc16[3],$lc16[4],$lc16[5],$lc16[6],$lc16[7],$lc16[8],$lc16[9],$lc16[10],$lc16[11],$lc16[12],$lc16[13],$lc16[14],$lc16[15])

şimdi önce gc (get-content) ile publickey imizi okuttuk

sonra $Limited veri olarak içinden sadece rakanları çektik.

sonra substring ile ilk 16sını aldık

Sonra bunları yan yana yazdırıp anahtar dizisini oluşturduk.

Şimdi bir şifre alalım ve bu anahtar ile encrypt edelim.

$newPass = Read-host " şifreyi girin : " -AsSecurestring | Convertfrom-Securestring -key $anahtar

Daha sonra bu $newPass değişkeni nasıl oldu diye bakarsak

PS C:\Users\can> $newPass
76492d1116743f0423413b16050a5345MgB8AGEAVwB0AE0AWgBoAGsARgAxAEYARgBzAFoAUQBHAHkAZQBtAHAAUQBGAEEAPQA9AHwAYgA1ADUAOAA2AGQANgAyAGQANABmAGYAMgA3ADcAYwA1ADUANABjAGQANAA0ADcAN
wA5ADQAMQA5AGYAYgAxAA==

İşte bunu bir dosyaya kaydedersek başka bir sisteme taşıyabiliriz.

Diyelim ki taşıdık diğer sistemdeyiz. İlk yapmamız gereken onu bir değişkene atmak

$PasSecStr = gc "C:\Users\can\file_saved.txt"

ve onu çevirmek

$PassSecObj = ConvertTo-SecureString $PasSecStr -key $Anahtar
$UnsecurePasswordEnd = (New-Object PSCredential "user", $PassSecObj).GetNetworkCredential().Password

Önce Securestring i bir objecte çeviriyoruz. Sonra

Unencrypt yapmak için PScredential object ini kullanıyoruz.

Not: eğer bir csv nin bir bölümünü aldıysak (CSV de bir header string)

$PassSecObj = ConvertTo-SecureString ($PasSecStr).string -key $Anahtar

Powershell repository oluşturmak

İstersek kendi repositorymizi oluşturabiliriz ve orada paketler yayınlayabiliriz.

Powershell bunun için hazır geliyor.

Önce bir script hazırlayacağız ve adı script ile aynı olan bir klasöre koyacağız daha sonra onu module olarak kaydedeceğiz.
* yani uzantısını .ps1 den .psm1 olarak değiştireceğiz.

Daha sonra bir modül manifestosu oluşturmamız lazım

New-ModuleManifest -Path "C:\users\can\scripts\Cantools\Cantools.psd1" -Author "Can" -desciption "Tools for work" -version "1.0"

Böylece manifesto dosyasını otomatk oluşturacak geri kalan verileri kendi hazırlayacak ve modüle ilişkin export edilen fonksiyonlarıda hepsi olarak ayarlayacak.

Artık publish edebiliriz.

C:> Publish-module -path "C:\users\can\scripts\Cantools" -repository Cantools

Publish ettiğimiz lokasyon bir ağ lokasyonuda olabilir. Bu durumda ağda b klasöre erişebilen tüm kullanıcılar içinde ki modülleri kullanabilirler.

C:> Register-PSRepository -name Cantools -InstallationPolicy trsuted -PublishLocation "C:\users\can\scripts\Cantools" -SourceLocation "C:\users\can\scripts\Cantools"

Artık bundan sonra kullanıcılar install-module ile direk kurabilirler. Mevcut repoları görmek için

PS C:\Users\can> Get-PSRepository

Name                      InstallationPolicy   SourceLocation
----                      ------------------   --------------
PSGallery                 Untrusted            https://www.powershellgallery.com/api/v2

Powershell Global Varible

Global variable yani değişkenler fonksiyonların içinde farklı dışında farklı scope a girmeyen değişkenlerdir.

deklerasyonu

$global:data = $null
$global:File = "c:\Users\can\data.csv"

Powershell self destructing script

bir script yazdım ve kullanıcıların içini okuyabilmesini istemiyordum. İçinde mail adresim vs vardı. Yani script çalışacak ve daha sonra kendini yok edecekti. Ayrıca script sadece bir defa çalışmalıydı yoksa her seferinde mail alacaktım.

Bu arada scriptin içi görülmesin ve sadece tek tıkla çalışsın diye ps2exe yi kullanarak scripti exe haline getirdim.
(https://gallery.technet.microsoft.com/scriptcenter/PS2EXE-GUI-Convert-e7cb69d5)

Scriptin içeriği önemli değil ama şu bölüm kısaca kalsın istedim.

$pathtofiletodelete = [System.IO.Directory]::GetCurrentDirectory()
$filetodelete = $pathtofiletodelete+"\get-cownetdata.exe"
start-process powershell -argument "remove-item -LiteralPath $filetodelete"

burada [System.IO.Directory] önemli çünkü exe olduğu için

$Invocation.MyCommand.Path (yada $Invocation.MyCommand.Source) çalışmadı. eve ps1 dosyası olsaydı çalışırdı ama exe olunca yemedi. Bunun içinde C# kütüphanesinden bu yapıyı kullandım ama onda da sadece Folder adresi geldi dolayısı ile onuda file name ekleyerek tamamlamak zorunda kaldım.
Daha sonra çalışan bir exe kendi dosyasını silemiyor bu nedenle yeni bir process başlattım ve onunla mevcut dosyayı sildim
start-process powershell -argument "remove-item -LiteralPath $filetodelete"

Powershell – 4 Get-Command

Bir komut iki parçadan oluşuyor verb-noun. Bu nedenle eğer bir komut arıyorsak aşağıda ki gibi yapabiliriz.

Ve/veya

Yapabiliriz.

Ama bazen cok fazla gelir cunku bazıları eklenen programlarla geliyorlar. Eger sadece cmdlet ariyorsak aramayi daraltabiliriz.

Powershell -3 Folder Drive Mapping

Bir folderin drive a MAP edilmesi:

Root path vermek zorundayiz “c:\test “ ama bu UNC de olabilir eger baska bir sistemden bagliyorsak (yada mount ediyorsak)

Ayrica

PSProvider vermek zorundayiz bu sefer FileSystem

Credentials PSProvidera göre degisir bazi PSProvider lar farkli credentials ile de calisabilme kabiliyetine sahiptir.

Artik “cd demo: “ komutu ile direk map ettigimiz yere ulasabiliriz. „:“ ya dikkat.

Bu sadece powershell ile erisilebilir bir drivedir. Mycomputer a gidip bakarsak göremeyiz.!!

Notlarım Sayfa 7

Powershell -2 Man pages

Aynı linuxte olduğu gibi PS’dede man pages mantığı mevcut. (zaten olmasa olmazdı)

hatta ve hatta


yaptığımızda sayfalarca detaylı bir man pages ile karşılaşırız. Örneklerde mevcuttur.

Burada kirmizi ile isaretli yer [] ile belirtilen birden cok degisken alabildigidir.
Örnegin

Get-service -ComputerName server-r2,localhost

Ama önce bit txt dosyasi olusturup sonra orda listeyi gönderebiliriz.

PS C:\ > get-service -ComputerName ( Get-Content .\computers.txt )

Ayrıca

Ancak

<string[]>  ise string olarak birden cok degiskeni alabilecegi anlamina geliyor.

PS C:\> dir c:\,C:\Windows\,C:\Users\

Gibi

Ancak

Örnegin “-Exclude “ [ ] icinde degil [-Exclude <string[]> ] yani -Exclude optional ama -Exclude kullaniyorsan stringi de kullanmak zorundasin diyor.

Powershell -1 PSDrive

Windows ta linuxtekinden farklı olarak file system dışında sistmelerde vardır. Mesela Registryde veya certstore da file sistem gibi gezmek mümkündür. İçerikleri görebiliriz ama file systemde yaptığımız işlemler burada farklı çalışır.

PS C:\> cd hkcu:
PS HKCU:\> dir


    Hive: HKEY_CURRENT_USER


Name                           Property
----                           --------
AppEvents
Console                        CtrlKeyShortcutsDisabled : 0
                               CursorColor              : 4294967295
                               CursorSize               : 25
                               DefaultBackground        : 4294967295
                               DefaultForeground        : 4294967295
                               EnableColorSelection     : 0
                               ExtendedEditKey          : 1
                               ExtendedEditKeyCustom    : 0
                               FaceName                 : __DefaultTTFont__
                               FilterOnPaste            : 1
                               FontFamily               : 0
                               FontSize                 : 1048576
                               FontWeight               : 0
                               ForceV2                  : 1
                               FullScreen               : 0
                               HistoryBufferSize        : 50
                               HistoryNoDup             : 0
                               InsertMode               : 1
                               LineSelection            : 1
                               LineWrap                 : 1
                               LoadConIme               : 1
                               NumberOfHistoryBuffers   : 4
                               PopupColors              : 245
                               QuickEdit                : 1
                               ScreenBufferSize         : 589889656
                               ScreenColors             : 7
                               ScrollScale              : 1
                               TerminalScrolling        : 0
                               TrimLeadingZeros         : 0
                               WindowAlpha              : 255
                               WindowSize               : 1966200
                               WordDelimiters           : 0
                               ColorTable00             : 0
                               ColorTable01             : 8388608
                               ColorTable02             : 32768
                               ColorTable03             : 8421376
                               ColorTable04             : 128
                               ColorTable05             : 8388736
                               ColorTable06             : 32896
                               ColorTable07             : 12632256
                               ColorTable08             : 8421504
                               ColorTable09             : 16711680
                               ColorTable10             : 65280
                               ColorTable11             : 16776960
                               ColorTable12             : 255
                               ColorTable13             : 16711935
                               ColorTable14             : 65535
                               ColorTable15             : 16777215
                               CurrentPage              : 3
Control Panel
Environment                    TEMP                  : C:\Users\can\AppData\Local\Temp
                               TMP                   : C:\Users\can\AppData\Local\Temp
                               Path                  : C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\I
                               ntel\WirelessCommon\;C:\Users\c
                                                       an\AppData\Local\Microsoft\WindowsApps;C:\Users\can\AppData\Loca
                               l\atom\bin;
                               OneDrive              : C:\Users\can\OneDrive
                               SSH_AUTH_SOCK         : /tmp/ssh-bh1cEupdliI4/agent.2696
                               SSH_AGENT_PID         : 5600
                               TACVIEW_DCS2ACMI_PATH : C:\PROGRA~2\Tacview\DCS\
                               PT6HOME               : C:\Program Files (x86)\Cisco Packet Tracer 6.1.1sv
                               PT5HOME               : C:\Program Files (x86)\Cisco Packet Tracer 6.1.1sv
                               QT_DEVICE_PIXEL_RATIO : auto
                               OneDriveConsumer      : C:\Users\can\OneDrive
EUDC
Keyboard Layout
Microsoft
Network
Printers
Software


    Hive: HKEY_CURRENT_USER\Software


Name                           Property
----                           --------
PDFsam Basic                   installed : 1


    Hive: HKEY_CURRENT_USER


Name                           Property
----                           --------
System
Uninstall
Volatile Environment           LOGONSERVER               : \\MONSTER
                               USERDOMAIN                : MONSTER
                               USERNAME                  : can
                               USERPROFILE               : C:\Users\can
                               HOMEPATH                  : \Users\can
                               HOMEDRIVE                 : C:
                               APPDATA                   : C:\Users\can\AppData\Roaming
                               LOCALAPPDATA              : C:\Users\can\AppData\Local
                               USERDOMAIN_ROAMINGPROFILE : MONSTER

Böylece normalde aldığımız “dir” komutundan çok daha farklı bir çıktı alırız.

İşte bu farklı sistemlere “PSDrive” deniyor.

“Get-PSDrive” ile bu değişik sistemleri listeleyebiliriz.

PS C:\Users\can> Get-PSDrive

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
Alias                                  Alias
C                 163.84         58.39 FileSystem    C:\                                                      Users\can
Cert                                   Certificate   \
D                 695.36        236.15 FileSystem    D:\
E                                      FileSystem    E:\
Env                                    Environment
F                                      FileSystem    F:\
Function                               Function
G                                      FileSystem    G:\
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
I                                      FileSystem    I:\
J                                      FileSystem    J:\
Variable                               Variable
WSMan                                  WSMan

Environment değişkenleri sistem değişkenleride gördüğünüz gibi burada. Bunlara basit bir şekilde erişebiliriz.

Drivelar C gibi sonunda “:” oldugundan burda da drive gibi baglandigindan Env: seklinde yaziyoruz. Sonuçta bunlarda PSDrive yani Powershell Drive’dır

Bu listede görülmeyen registry adreslerine de erişebiliriz.

#Set-Location Registry::\HKEY_USERS#

ve

New-PSDrive HKU Registry HKEY_USERS
Set-Location HKU:

Sayfa 4 Linux Man page den devam

Yeni gelenler

Evet bir yandan Udemy de Azure çalışırken bir yandan da iş yerinde Powershell bilgimi arttırıyorum. Powershell notlarımı artık burada yayınlamaya başlayacağım.

bayaaa bir kitap gibi oldular zaten.

AD RMS (Rights Management Services)

Amacı bilgilerin dışarı çıkmasını engellemektir. Office ve sharepoint gibi uygulamalar RMS kullanabilirler.

Encryption ile beraber kullanılırsa saklanan veya taşınan verinin güvenliği sağlanabilir.

  • Dosyayı bulunduğu klasörün yetkilerinden bağımsız olarak korur. Bulunduğu klasöre erişen kullanıcının okuma ve yazma yetkisi olsada engel olabilir.
  • Sadece açmaya yetkili kullanıcılar içeriği görebilir.
  • Copy, print, forward…… gibi actionları da kontrol eder.

RMS ile çalışmak için gerekli şeyler

  • AD RMS root certification clusterı oluşturulmuş olmalı
    • İlk RMS server kurulurken oluşturulur.
      • Kurulduğu domaindeki tüm lisans ve certifikasyon işlemlerini yönetir.
      • Bilgileri MSSQLserverda yada WID (Windows Internal Database) de saklar.
      • AD RMS licensing-only clusterları geniş dağıtık ortamlarda kullanılır.
        • lisans dağıtımı ve içerik kullanımı ve publishinge izin verir.

Installation

  • AD DS Domaininde olmalıdır.
  • Server 2008 ve sonrasına kurulabilir.
  • AD DS üzerinden SCP (Service Connection Point) yayınlar bu SCP içinde Clusterın yer bilgisi vardır.
  • Domain sistemleri AD RMS servisini bulmak için SCP’yi sorgularlar.
  • RMS client Vista ve sonrası olabilir.
    • RMS-enabled applicationların AD RMS templatelerini kullanmasını enforce etmek gerekir.
  • AD RMS kurulumu cluster olarak bilinir ancak bu HA vs değildir.
    • DC olmayan HA bir servera kurulması önerilir.
    • Eğer birden çok forest mevcut ise her forestın kendi RMS clusterı olmalıdır.