Powershell: Tworzenie własnego obiektu

2014-04-29

Programiści przyzwyczajeni są do tego, że mogą stworzyć obiekt o dowolnych właściwościach. Oto jak to zrobić w powershell:

$o = New-Object PSObject

ta linia tworzy obiekt $o, który nie ma jeszcze żadnych specyficznych właściwości

$o  | Add-Member 'Name' ''

powoduje dodanie do obiektu $o właściwości Name o wartości ”

Aby skorzystać z obiektu:

$o.Name = 'Rafal'
$o

i gotowe!

A tu to samo, ale w nieco inny sposób:

$hash = @{ Name = '';Date = Get-Date; Value = '' }
$o = new-object PSObject -Property $hash 
$o

Najpierw tworzymy tabelę hashującą z określonymi nazwami i wartościami domyślnymi, a potemtworzymy obiekt wskazując, że właściwości znajdują się w tej tabeli!!!

By Rafał Kraik in Power Shell

Powershell: Nazwa aktualnej funkcji

2014-04-29

Dajmy na to, że chcesz wyświetlić informację o błędzie i zawrzeć w niej nazwę aktualnie uruchomionej funkcji. Posłuż się:

$MyInvocation.MyCommand

W przypadku Powershell 2.0 analogicznym poleceniem jest:

(Get-PSCallStack)[0].Command

Tutaj sprawa wygląda jeszcze fajniej, bo można zapytać, jaka funkcja wywołała moją funkcję używając:

(Get-PSCallStack)[1].Command

 

By Rafał Kraik in Power Shell

Rejestr dla SQL

2014-04-16

Jeśli chcesz zebraćlub zmodyfikować pewne właściwości na temat SQL serwera możesz przejrzeć rejestr. Rejestr ma trochę specyficzną budowę. Po pierwsze należy zajrzeć do klucza:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL

Znajdziesz tutaj właściwości, których nazwa jest równa nazwie instancji, a ich wartość, to nazwa klucza, którego należy poszukać aby dostać się do właściwych parametrów instancji SQL

sql_registry

W tak znalezionym kluczu odnajdziesz sporo informacji o konfiguracji SQL. Np.:

  • Parameters – parametry startowe instancji
  • SuperSocketNetLib\Tcp – możliwość włączenia szyfrowania, ustawienia certifaktu
  • SuperSocketNetLib\Tcp\IpAll – numer portu na którym nasłuchuje serwer
  • Setup – edycja i wersja SQL

registry_sql_instance

Istnieje też klucz:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer

Klucz był wykorzystywany w wersji 2000, obecnie zawiera wybrane informacje o instancji domyślnej.

registry_sql_def_instance

Aby edytować rejestr z poziomu powershell zajrzyj: Powershell czytane rejestru dla SQL

 

By Rafał Kraik in SQL

Powershell czytane rejestru dla SQL

2014-04-16

(Zajrzyj też do wpisu Rejestr dla SQL)

Rejestr możesz przeglądać edytować używając standardowych komend Set-Location, New-Item, Set-ItemProperty, ale komendy te mają jedną wadę. Pracują lokalnie. Jeżeli masz zamiar pracować z rejestrem zdalnym lepiej będzie posłużyć się obiektem .NET pozwalającym na takie rzeczy. Zaczynamy od zadeklarowania zmiennych (w moim przypadku poszukam numeru portu na którym pracuje instancja SQL SQLEXPRESS):

$computer=’server001’
$instance=’SQLEXPRESS’
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(’LocalMachine’, $computer)

W ten sposób obiekt $reg pozwala pracować z gałęzią Local_Machine na komputerze server001. Teraz poszukamy wartośi klucza:

$key=’SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL’
$subKey= $reg.OpenSubKey($key)

Ten klucz zawiera informacje o tym jakie instancje są zainstalowane na serwerze oraz jakie podklucze w HKLM\Software\Microsoft\Microsoft SQL Server odpowiadają za te instancje.

sql_registry

Poniższe polecenie wyciąga z klucza 'SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL’ wartość właściwości o nazwie SQLEXPRESS, bo

-$subKey wskazuje obecnie na SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL

-$instance = SQLEXPRESS

$instanceRegistryKey=$subKey.GetValue($instance)

W ten sposób w $instanceRegistryKey masz wartość „MSSQL11.SQLEXPRESS”. Dzięki niej możesz odnaleźć właściwe miejsce w rejestrze do odczytania konfiguracji interesującej cię instancji.

Aby zbadać na jakim porcie działa wybrana instancja szukajmy dalej:

$key=”SOFTWARE\Microsoft\Microsoft SQL Server\$instanceRegistryKey\MSSQLSERVER\SUPERSOCKETNETLIB\TCP\IPALL”
$subKey=$reg.OpenSubKey($key)

Teraz $subKey wskazuje na klucz SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQLSERVER\SUPERSOCKETNETLIB\TCP\IPALL

Aby odczytać numer portu wystarczy wykonać ostatnie polecenie:

$port=$subKey.GetValue(„TcpPort”)

 

By Rafał Kraik in Power Shell, SQL

Powershell: Wysyłka maila z konta gmail

2014-04-16

To działa! Jeśli chcesz wysłać pocztę z konta gmail.

$cred=Get-Credential(„Imie_Nazwisko”)
Send-MailMessage -SmtpServer smtp.gmail.com -Port 587 -Credential $cred -UseSsl true -From ’Imie_Nazwisko@gmail.com’ -To ’Czyjes_Konto@gmail.com’ -Subject 'TEST’

Mniej intuicyjne opcje to:

  • Credential – obiekt służący do uwierzytelnienia, zawiera nazwę pod którą chcesz się uwierzytelnić i hasło, które do tego służy. Komenda Get-Credential pobiera nazwę i hasło (chyba, że nazwa już jest podana, tak jak w naszym przykładzie, wtedy pobiera tylko hasło). Opcja -Credential nakazuje użycia tych credentiali do uwierzytelnienia podczas wysyłania poczty.
  • UseSSL pododuje nawiązanie połączania z SMTP z wykorzystaniem protokołu SSL

Credential może też być zapisany w zaszyfrowanym pliku i wczytany przed wysłaniem maila. A jak to zrobić? Tak:

1. Najpierw pobierz hasło:

$cred = Get-Credential -Credential „Imie_Nazwisko”

2. Zapisz credential w pliku:

$cred.Password | ConvertFrom-SecureString | Set-Content c:\temp\psswd.txt 

plik zawiera zaszyfrowane hasło. (Szyfr nie jest wyjątkowo mocny, ale zawsze to coś).

3. Przed wysyłką maila wczytaj dane z pliku:

$password = Get-Content C:\temp\psswd.txt | ConvertTo-SecureString

4. Utwórz obiekt credential:

$cred = New-object System.Management.Automation.PsCredential(„Imie_Nazwisko”,$password)

  Czytaj dalej »

By Rafał Kraik in Power Shell

SQL 2000 sprawdzenie rozmiaru bazy danych

2014-04-16

W nowszych wersjach (od SQL 2005)  do sprawdzenia rozmiaru bazy danych można sie posłużyć zapytaniem:

SELECT sum(size*8.0/1024) AS SizeOnDisk, sum(FILEPROPERTY(name, 'SpaceUsed’) *8.0/1024) AS SizeUsed FROM sys.database_files

Niestety takie zapytanie w SQL 2000 nie zadziała, bo tam nie istnieje widok sys.database_files. Tam należy skorzystać z tabeli systemowej sysfiles:

SELECT sum(size*8.0/1024) AS SizeOnDisk, sum(FILEPROPERTY(name, 'SpaceUsed’) *8.0/1024) AS SizeUsed FROM sysfiles

Taka tabela istnieje też w kolejnych wersjach SQL servera, więc można by powiedzieć, że  to drugie zapytanie jest uniwersalne. Microsoft nie gwarantuje jednak, że w kolejnych edycjach coś się w tej tabeli znie zmieni… dlatego jeśli można lepiej używać pierwszego zapytania.

 

By Rafał Kraik in SQL

Powershell: Jak sprawdzić architekturę maszyny x32 lub x64

2014-04-16

Tak:

$x=Get-WmiObject -ComputerName serwer01 -Class win32_operatingsystem
$x.OSARCHITECTURE

Architecture

Jak widać sprawdzenie może sie odbyć zdalnie.
By Rafał Kraik in Power Shell