Ugrás a fő tartalomra

PowerShell alapok 1

A PowerShellt a Microsoft eleinte a hagyományos CMD / DOS-prompt, a parancssor utódjaként tervezte, de aztán egyre inkább egy univerzális rendszerkezelő, feladatautomatizáló platformként lett definiálva.

A PowerShell tehát egyszerre nagyon sok minden: parancssori eszköz, amellyel begépelt parancsokkal tudjuk utasítani a számítógépünket, hogy különböző műveleteket elvégezzen. A PowerShell egy programnyelv is, minden ehhez szükséges jellemzővel: ciklussal, vezérlőutasításokkal, operátorokkal, változókkal, adattípusokkal.

PowerShell :

az  Windows parancssori rendszerhéj, mely különösen a rendszergazdák (üzemeltetésre) számára terveztek. 


Windows PowerShell tartalmaz egy interaktív kérdés és a egy parancsfájl-kezelési környezet, amely önállóan vagy együtt is használhatók.


Legtöbb rendszerhéjjal ellentétben, a komunikáció  szöveg, de a windows PowerShell a .NET-keretrendszer közös nyelvi futtatókörnyezet (CLR) és a .NET-keretrendszer épül, és objektumokkal kommunikál.


 Ez a alapvető változtatás a környezet kezelése és a Windows configuration teljesen új eszközöket és módszereket biztosít.


 Windows PowerShell több mint száz alapszintű fő parancsmagot tartalmaz, és mindenki írhat írhat saját parancsmagokat is, melyeket akár más felhasználókkal való megosztással is használhat..



A környezetválasztóval, például a Windows PowerShell hozzáférést biztosít a fájlrendszerhez regisztry-hez, szolgáltatók más adattárakban, a beállításjegyzék és a digitális aláírás tanúsítványtárolókban lévő adatokhoz is.



Használata:

   - Fejelsztésre a  Powershell ISE alkalmazáson interaktív módban a legkényelmesebb
   - Futtatáshoz az elkészült és állományba mentett szkript (  .ps1 file) futtatása elég


Szintaktika

Megjegyzés jelölése :
##  íéáűúőóüö_ÍÉÁŰÚŐÓÜÖ 

Más ps elő betöltése:
. d:\prg\Reporting\Modules\kl.ps1 

Környezet munkaterület beállítása:
d:
cd \prg\kl\riport




Értékek file-ből betöltése és feldolgozása (soronként tömb elemibe):

$kltam = Get-Content "d:\prg\tam.txt"

$count =0
$kltam | ForEach-Object{


## beolvasás fileből és minta csere tömb elemeivel:

$sql = Load-File ("d:\prg\riport\kl.sql")
$r=[regex]':csere:';
$sql = $r.Replace($sql, $kltam[$count], -1);


...


   $count++
}


Minta : LDAP (maszkolt) felhasználók lista lekérdezés és excel-be írás:


$SAMName = "kecskemetil*"
$excel = New-Object -COM Excel.Application
$ci = [System.Globalization.CultureInfo]'en-US'
$src="d:\prg\ldap.xls"
if ( [System.IO.File]::Exists($src) )
{
  remove-item -force $src
}
$book = $excel.Workbooks.PSBase.GetType().InvokeMember('Add', [Reflection.BindingFlags]::InvokeMethod, $null,$excel.Workbooks, $null, $ci)
$excel.Visible = 0
$sheet = 1
$sh = $book.sheets.item($sheet)

$sh.Cells.item(1,1).formulaLocal = "CN"
$sh.Cells.item(1,2).formulaLocal = "sAMAccountName"
$sh.Cells.item(1,3).formulaLocal = "title"
$sh.Cells.item(1,4).formulaLocal = "distinguishedname"
$sh.Cells.item(1,5).formulaLocal = "manager"
$sh.Cells.item(1,6).formulaLocal = "displayName"
$sh.Cells.item(1,7).formulaLocal = "physicalDeliveryOfficeName"
$sh.Cells.item(1,8).formulaLocal = "mail'"
$sh.Cells.item(1,9).formulaLocal = "department"
$sh.Cells.item(1,10).formulaLocal = "mobile"
$sh.Cells.item(1,11).formulaLocal = "memberOf"
$sh.Cells.item(1,12).formulaLocal = "initials"

$i = 2

ldap_fnev & "));cn, samaccountname, title, distinguishedname, employeeid, physicalDeliveryOfficeName, manager, displayName, department, mail, mobile, mailNickname, manager, description, extensionAttribute2;subtree"
$root = [ADSI]"LDAP://DC= netudki,DC=corp"
$search = [adsisearcher]$root
$Search.filter = "(&(objectClass=user)(sAMAccountName= $SAMName))"
$colResults = $Search.FindAll()

$ii=2
foreach ($i in $colResults)
{
$sh.Cells.item($ii,1).formulaLocal = [string]$i.Properties.Item('cn')
$sh.Cells.item($ii,2).formulaLocal = [string]$i.Properties.Item('sAMAccountName')
$sh.Cells.item($ii,3).formulaLocal = [string]$i.Properties.Item('title')
$sh.Cells.item($ii,4).formulaLocal = [string]$i.Properties.Item('distinguishedname')
$sh.Cells.item($ii,5).formulaLocal = [string]$i.Properties.Item('manager')
$sh.Cells.item($ii,6).formulaLocal = [string]$i.Properties.Item('displayName')
$sh.Cells.item($ii,7).formulaLocal = [string]$i.Properties.Item('physicalDeliveryOfficeName')
$sh.Cells.item($ii,8).formulaLocal = [string]$i.Properties.Item('mail')
$sh.Cells.item($ii,9).formulaLocal = [string]$i.Properties.Item('department')
$sh.Cells.item($ii,10).formulaLocal = [string]$i.Properties.Item('mobile')
$sh.Cells.item($ii,11).formulaLocal = [string]$i.Properties.Item('memberOf')
$sh.Cells.item($ii,12).formulaLocal = [string]$i.Properties.Item('initials')
$ii++
}

#excel elmentése $src helyre és néven "56" formátumban - excel formátum, majd futo excel folyamat bezárása
[void]$book.PSBase.GetType().InvokeMember('SaveAs', [Reflection.BindingFlags]::InvokeMethod, $null, $book, ($src,"56"), $ci)
$excel.quit() 
#  if (ps excel) { kill -name excel}  ### ha fut mindenképpen lezárás
$null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)




PS használat:
cmd/bat fileből: 
powershell -noexit &"c:\Könyvtár szóközzel\második.ps1"
powershell -noexit c:\második.ps1


Buktatók:
 - a társítás ps1 notepad.exe ezért futtatásnál nem fút
 - teljes elérési útvonal megadása szükséges
 - jogosultság beállítása (csak admin)
## jog beállítása
PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
PS C:\> Set-ExecutionPolicy -ExecutionPolicy Bypass
## jog lekérdezése
PS C:\> Get-ExecutionPolicy -List

Megjegyzések