2015-12-11
Skrypt powershell na systemie zdalnym uruchamiał starego dosowego batcha, który miał za zadanie uruchomić jakiś program exe i kończył się instrukcją
exit %errorlevel%
No i cóż ciągle dostawałem numer 9009. Krótkie szukanie po googlach i właściwie ciągle informacje o błędzie związanym z DNS! A ten program exe nic nie miał wspólnego z siecią. I dopiero tutaj znalazłem rozwiązanie:
http://www.febooti.com/products/automation-workshop/online-help/events/run-dos-cmd-command/exit-codes/
Error 9009 – Program is not recognized as an internal or external command, operable program or batch file. Indicates that command, application name or path has been misspelled when configuring the Action.
Po prostu z jakiegoś powodu w tym momencie mój exe znikał, a dlaczego to już całkiem inna bajka.
2015-12-11
Użytkownik zażyczył sobie nadania uprawnień:
-odczyt
-zapis
-wykonanie procedur w całej bazie danych
Odczyt – proste – db_datareader
Zapis – proste -db_datawriter
Wykonanie – proste – db_procexecutor … ops nie ma takiej roli 😉 No ale sprawę załatwia polecenie
grant execute on database::DatabaseName to [UserName]
2015-12-07
Pisząc skrypt masz możliwość obsługi błędów na kilka sposobów, a te najpopularniejsze to
- blok try / catch
- instrukcja trap
Zawsze polecam stosowanie try catch, bo nie jest to trudne rozwiązanie, a pozwala na dość elastyczną obsługę błędów. Zasada jest prosta. W bloku try umieść instrukcje, które potencjalnie mogą spowodować błąd, a obsługę błędu wykonaj w catch. Takich bloków try catch można w skrypcie umieścić więcej i dzięki temu można w różny sposób reagować na różne błędy.
function Get-IP($hostName)
{
[System.Net.Dns]::GetHostAddresses("www.$name.com")
}
$name = 'kaskdicxoienrh'
Try
{
Get-IP $name
}
catch
{
Write-Warning "$name - bad name - terminating script"
return
}
Czytaj dalej »
2015-12-03
Wyobraź sobie, że masz w nocy do wykonania długotrwałe zadanie. Jeśli na komputerze nic się dzieje mogą się zdarzyć różne niespodziewane rzeczy: komputer przejdzie w stan czuwania, rozłączy się sesja zostaniesz wylogowany itp. No a oczywiście nie chce ci się siedzieć całą noc, żeby tylko ruszać myszką…
No więc napiszmy program ruszający myszką. Co będzie potrzebne?
- klasa [System.Windows.Forms.Cursor], a dokładniej jej właściwość Position, która to opisuje aktualne położenie kursora myszki w punktach
- klasa System.Drawing.Point, która jak sama nazwa wskazuje pozwala na zapamiętanie współrzędnych punktu
Aby sprawdzić gdzie znajduje się kursor wykonaj polecenie:
[System.Windows.Forms.Cursor]::Position


X i Y to właściwości opisujące aktualne położenie kursora. Jeśli chcesz zmienić jego położenie, to zmień wartość X lub Y, np. tak: Czytaj dalej »
2015-12-01
Chcesz mieć obiekt, który ma właściwości o wybranych przez Ciebie nazwach. Może np. czytasz konfigurację z pliku ini i z zapisu:
Name=Server001
Domain=domain.pl
Service=SQL
chcesz utworzyć obiekt o właściwościach:
$obj.Name # o wartości Server01
$obj.Domain # o wartości domain.pl
$obj.Service # o wartości SQL
Oto co należy zrobić:
Tworzysz obiekt:
$obj = New-Object -TypeName psobject
A potem wykonujesz kolejno:
$obj | Add-Member -MemberType NoteProperty -Name 'Name' -Value 'Server01'
$obj | Add-Member -MemberType NoteProperty -Name 'Domain' -Value 'domain.pl'
$obj | Add-Member -MemberType NoteProperty -Name 'Service' -Value 'SQL'
Kiedy chcesz się odwołać do właściwości $obj zrobisz to np. tak:
if( $obj.Name -eq 'Server003')
{
...
}
Czytaj dalej »
2015-12-01
Nie wiem do czego to było koledze potrzebne, może kompilator pisze (?) ale pytanie było takie:
Mam zmienną x:
$x=1
Chcę mieć zmienną y, która w swojej wartości będzie miała nazwę zmiennej x. Oto zaproponowane rozwiązanie:
$x=1
$y = (get-variable x).Name
$y
2015-11-30
Otwieram połączenie do serwera zdalnego
Enter-PSSession -Computer MyServer -Credential (Get-Credential 'domain\myadminusername')
Potem w tym połaczeniu odwołuję się do:
[ADSI]"WinNT://$($env:userdnsdomain)/another_user_name"
Niestety dostaję błąd:
Value for dictionary entry is not specified.
+ CategoryInfo :
+ FullyQualifiedErrorId : System.Management.Automation.Remoting.PSRemotingDataStructureException
Jeśli zaloguję się na serwer lokalnie przez RDP i wykonam dokóładnie to samo polecenie, to wszystko działa poprawnie. Dlaczego?
W sesji remotingu chciałem skorzystć z usług katalogowych (kontroler domeny), co spowodowałoby wtórne uwierzytelnienie na kontrolerze domeny czyli double hop….
Do double hop trzeba się odpowiednio skonfigurować….