Portál AbcLinuxu, 30. dubna 2025 12:44
Nedávno jsem ve Win 7 zkoumal power shell z pohledu uživatele *nixoveho terminálu.
Spouštět binárky Win32UnixUtils umístěné někde v PATH je sice možné, ale terninál je takový neohrabaný (Copy, Paste nijak nefunguje tak jak je zvykem apod). Proto asi vytvořili jakýsi editor v jehož horním okně se píše jakožto běžný text a po spuštění se v dolním okně vypisuje výstup, tzn neco jako IDE (geany).
Je to vůbec použitelný jako terninál v *nixu ?
Dají se s tím dělat podobné věci ? Nebo je to jen nějaká MS featura pro správu systému a jeho případnou automatizaci třeba v rámci podnikové sítě.
Za komentáře budu vděčný. Za nějaké vzorové skripty s popisem funkce ještě více.
PS: jen má zvědavost a sorry za zápisek o MS produktu. Hned si do lisknout a kleknout na hrach.
Tiskni
Sdílej:
kleknout na hrachStále sem nikdo nepřišel.
Myšlenka jistě zajímavá, stejně asi jako filesystem založený na SQL (WinFS), co v M$ plánovali pro Vistu, ale nakonec se ho zbavili, protože to bylo táááák ppóómmáállýý, že se ještě rádi vrátili k NTFS.
Z toho plyne poučení, že zajímavá myšlenka != užitečná myšlenka.
že se ještě rádi vrátili k NTFS
WinFS byl postaven nad NTFS; soubory se ukládaly v NTFS
protože to bylo táááák ppóómmáállýý
Jak jste na to přišel?
Kromě přechodu na platformu x64, v sobě Exchange Server 2007 skrývá ještě jednu, opravdu velkou novinku. A tou je přesun správy produktu z grafického rozhraní (GUI) do Windows PowerShellu. Toto je opravdová revoluce v administraci (nejen) Exchange Serveru. (..) Co je tedy na administraci Exchange Serveru tak revolučního? Jednoznačně to, že grafické rozhranní (GUI) pouze vykonává příkazy PowerShellu. Nic víc. Jinými slovy – bez GUI se obejdete. Bez PowerShellu nikoliv. GUI je určeno jen a pouze pro základní úkony, zatímco PowerShell je určen na všechno! Z toho také vyplývá, že jakmile budete někdy v budoucnu hledat, jak nastavit něco, co nebudete moci nalézt v grafické konzoli, musíte do PowerShellu a nalést zde potřebný příkaz. Ano, pravděpodobně budete muset otevřít help a s příkazem se podrobněji seznámit.Ale Linux prece obsahuje tu blbou prikazovou radku a proto je uplne na nic ne?
Verte tomu nebo ne, ale trapil jsem se tim asi pul dne. Ano, je to trivialni vec, ktera urcite jde napsat vyrazne jednoduseji, efektivneji a za 1min. Ale mohu potvrdit, ze koncept PS je divny. Nejvetsi problem delala ta smycka. V jednu chvili jsem napr mel smycku, ktera korektne prbehla pouze poprve, pak 2min ticho a nakonec vyjimka... nechapu
Pracuju jako vyvojar a myslim si, ze snad nejsem uplnej diletant,ale tenhle tool mi nesedi. Nicmene souhlasim s tim, ze CMD je nepouzitelne. Mozna, ze PS se casem vylepsi. Vypada totiz celkem nabusene. Presto z nej mam pocit jako z vetsiny M$ devel. produktu. Nekdo se tam v RedM opravdu snazi (to je fakt videt), ale tak nejak trochu "po svem".
Je to videt napr. i na C#. Tam se autori evidentne snazili poucit z chyb jinych (java,...), pouzit veci ktere lidi uz znaji (C syntaxe,...), dodat veci, ktere "stare" jazyky nemeli (dokumentace, reflexe, set/get...), ale nejak se to uplne nepovedlo. Stvorili proste jen dalsi slozity moloch, ktery sice umi par hezkych kousku, ma par super-feature, ale jinac je takove rozpacite.
Proste je to takove mrskvosofti. PS analogicky. Je to URCITE lepsi nez CMD,ma to byt nove generace shellu, ale je to takove ... Ja nevim, widlaci se to asi nauci pouzivat a budou machrovat jak jednim predpripravenym skriptletem udelaji neco uzasne jednodusse narozdil od *nix shellu, ale vubec ji asi nedojde, ze to neni plnohodnotny tool, protoze shell stoji na integraci s FS, procesy, ... a obavam se, ze tady na low-level urovni bude PS tvrde neohrabanej, kostrbatej, prave diky OO pojeti. No nevim, uvidime jaky nazor na to mate vy. Ja tenhle tool pouzil jen jednou a vodvarenej z nej fakt nejsem. Prijde mi to jako lepsi Visual basic nebo tak neco. Flame!
$result=get-adgroup -filter 'CN -like "XXX*"' -Property member
$result | foreach { write $_.name; write "------"; $_.member; } > sec_grp.txt
Netlucte me, muj prvni kod v PS... Pokud nekdo vite jako to elegantne vypsat pomoci ted formatovacu - list, tabulka,... tak sem s tim. K tomu jsem PS proste nedokazal donutit. Pro vysvetlenou proc to delam ve smycce: get-adgroup sice "dokaze vypsat" members (a la java toString()), ale urizne to, aby to nebylo moc dlouhe. Jo, a slo by to napsat v jedne radce, ale takhle je to asi prehlednejsi. Jinac videl jsem i pekne veci, ktere to dokazali kopnout primo do XLS, ale osobne preferuji plain-file (Njn, halt *nixove zvyky)
S tou blbostí typu neumí smazat adresař jsem se celkem pobavilA jak se teda spustí ten příkaz tak aby to fungovalo?
[jk@master ~]$ ls bash: ls: command not found
PS D:\Temp\tmp> mkdir aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
New-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 cha
racters, and the directory name must be less than 248 characters.
At line:38 char:24
+ $scriptCmd = {& <<<< $wrappedCmd -Type Directory @PSBoundParameters }
+ CategoryInfo : InvalidArgument: (D:\Temp\tmp\aaa...aaaaaaaaaaaaaaa:String) [New-Item], PathTooLongExcep
tion
+ FullyQualifiedErrorId : ItemExistsPathTooLongError,Microsoft.PowerShell.Commands.NewItemCommand
Ptám se, a to upozorňuju, že naprosto nestraně, jak tento příkaz provedu tak, aby ta chyba nenastala. Jinými slovy, jak vytvořím v PS adresář s takovým jménem?
PS D:\Temp\tmp> New-Item aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Type: directory
New-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 cha
racters, and the directory name must be less than 248 characters.
At line:1 char:9
+ New-Item <<<< aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ CategoryInfo : InvalidArgument: (D:\Temp\tmp\aaa...aaaaaaaaaaaaaaa:String) [New-Item], PathTooLongExcep
tion
+ FullyQualifiedErrorId : ItemExistsPathTooLongError,Microsoft.PowerShell.Commands.NewItemCommand
Upozorňuju, že žádný stray chars (char(160) ani nic podobnýho) tam nejsou.
takto si myslím že bud o MAX_PATH víte ale hurá našel jsem něco co nejdeO MAX_PATH vím jen to, že existuje, čili vím, že taková konstanta je ve windows API definovaná, ale nemám tušení, jaká je její hodnota. Přepokládám ale, že vysoká, čili řádově tisíce ne?
Nebo snad má MAX_PATH hodnotu 260?
Ano. Nicméně některé funkce umí pracovat s cestou dlouhou až 32767, kde její jednotlivé části mají délku až 255.
Předpokládám, že ne, páč to by bylo dost absurdní.
To je z důvodů kompatibility s Windows 95, Windows 98, Windows ME a snad i s 16-bitovými Windows. V těchto verzích se používaly tzv. ANSI verze všech funkcí, které měly toto omezení. Tehdy to ani nevadilo, protože FAT nepodporuje delší cesty.
Já teď nemám k dispozici PowerShell, ale domnívám se, že s cestami delšími než 260 znaků by mělo jít pracovat (alespoň ve Windows Vista a novějších).
s cestami delšími než 260 znaků by mělo jít pracovat
s cestami -> s některými cestami
Já teď nemám k dispozici PowerShell, ale domnívám se, že s cestami delšími než 260 znaků by mělo jít pracovat (alespoň ve Windows Vista a novějších).Ten výpis, co jsem poslal, je z Windows 7. Takže buďto to nejde, nebo je potřeba ten příkaz nějak specielně upravit, nevim...
aaa...\bbb...\neco
, kde aaa...
má 200 znaků a bbb...
má také 200 znaků, tedy délka cesty je větší než MAX_PATH=260, tak by to mělo jít.
PS D:\Temp\tmp> mkdir a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/
a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/
a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a
New-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 cha
racters, and the directory name must be less than 248 characters.
At line:38 char:24
+ $scriptCmd = {& <<<< $wrappedCmd -Type Directory @PSBoundParameters }
+ CategoryInfo : InvalidArgument: (D:\Temp\tmp\a\a...a\a\a\a\a\a\a\a:String) [New-Item], PathTooLongExcep
tion
+ FullyQualifiedErrorId : ItemExistsPathTooLongError,Microsoft.PowerShell.Commands.NewItemCommand
Používám Powershell už asi dva roky jako hlavni shell na windows.. jsem zvykly z linuxu mit pusteny jeden terminal a bezne operace delat v nem. powershell je z pocatku trochu neohrabany, ale je to vcelku mocny nastroj. Mam v nem i jednoduchou zpravu ukolu do MS Outlook, aliasy a la linux, sprava procesu.. nektere principy (jako zakladni pojmenovani funkci) mi uplne nesedi, ale libi se mi treba princip drivů.. navíc jeho největší síla je opravdu ve správě MS serverových produktů.. Pěkný web s hezkými skripty je např. http://thepowershellguy.com/blogs/posh/
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.