Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Net view > .txt / -Replace

Dobrý den,

chtěl bych Vás poprosit o radu. Pomocí příkazu net view > .txt si vytvořím seznam všech pc v síti v txt. Problém ale je, že po vytvoření vypadá soubor třeba takto a já chci výpis z txt dále používat třeba pro WMI:

Název serveru Poznámka

-------------------------------------------------- -----------------------------
\\pc-xp1
\\pc-xp2
\\w7-pepa
\\w71
Příkaz byl úspěšně dokončen.

Pracuji v PowerShellu a pomocí Foreach-object a -replace si dokáži vymazat texťák tak, aby mi tam zůstaly jen počítače.. Problém ale je, že tam zůstanou zbylé prázdné řádky a také mezery za vypsanými počítači a WMI to potom neschroustá.

Předem děkuji za tipy, triky. ;)

Předmět Autor Datum
tipy, syntaxe asi není přesně: for /f "tokens=1-3 delims=\ " %%1 in ('net view') do echo %%i>>soubo…
lední brtník 14.02.2013 10:22
lední brtník
.. možná by to chtělo rozvést co je účelem Tvého snažení. Hodně věcí (zkušený powershell guru by řek…
MKc 14.02.2013 16:10
MKc
Děkuji moc oběma za komentáře! To mě nenapadlo, děkuji, dobrý nápad! Jde mi o to, že potřebuji vyexp…
miny 14.02.2013 16:51
miny
to v siti nemate domain controller? nemyslim ze pomoci net view vyexportujes to co potrebujes. Pokud…
MKc 14.02.2013 18:15
MKc
Já to mám do školy, kde se učíme s PowerShellem, tak právě proto to musím dělat přes něj. Jdu si nai…
miny 14.02.2013 22:27
miny
OMG, strašný problém.. net view |find "\\" edit: aha, powershell. :-) edit2: v podstatě ti stačí…
touchwood 14.02.2013 22:57
touchwood
Já jsem to nakonec vyřešil jinak, že jsem si udělal lehkej skript pomocí foreach a select-object. J…
miny 15.02.2013 13:08
miny
No počkej počkej.. a jak si do te proměnné pro foreach dostal ty computer hostnames?
MKc 18.02.2013 09:26
MKc
www.lansweeper.com
pme 14.02.2013 18:18
pme
.. jeden ukázkový příklad (načte example.txt kde je výše uvedený text s hostnamy vč. UNC cesty) $a… poslední
MKc 18.02.2013 09:35
MKc

.. možná by to chtělo rozvést co je účelem Tvého snažení. Hodně věcí (zkušený powershell guru by řekl všechno) se dá dělat přímo v Powershellu.
Myslím, že pro Tvou potřebu net view ani použít nemusíš.

Půjde to určitě takhle:
načteš do proměnné (aby se tím lépe pracovalo) obsah souboru computers.txt .. i se vším tim bordelem, a pak pomocí regulárních výrazů vyhledáš řetězec \\ a text co za tím následuje. Pokud to napíšeš správně, budeš mít pouze názvy computeru v property Value a s tím dale pracovat.

Děkuji moc oběma za komentáře! To mě nenapadlo, děkuji, dobrý nápad!
Jde mi o to, že potřebuji vyexportovat počítače v síti pomocí příkazového řádku (v PowerShellu) do textového souboru a s tím souborem potom dál pracovat v síti. S tou další prací v síti myslím: Vyhledat v klientech instalované produkty, které některé pc nemají a ty potom nasadit. Proto mě napadlo si vyexportovat všechny pc v síti tímto způsobem do texťáku a ty potom načíst pomocí get-content .. a použít gwmi win32_product ..

to v siti nemate domain controller? nemyslim ze pomoci net view vyexportujes to co potrebujes.
Pokud jsou PC v doméně (v dnešní době si pomalu nedokážu představit sít bez domain controlleru), pomocí ADSI nebo GET-ADcomputer (tady potřebuješ naimportovat AD cmdlet) si snadno vytáhneš veškeré computer accounty.

Z hlavy:
get-adcomputer -filter * -properties * |gwmi win32_class -computername $_ |?{$_.product -like "*blabla*"} .. atd atd

Zkusím vykoumat ten regex výraz na vytažení computernames z textaku jakkoliv strukturovaneho ...

Já to mám do školy, kde se učíme s PowerShellem, tak právě proto to musím dělat přes něj. Jdu si naimportovat AD cmdlet a zkusím to. Dobře, děkuji mockrát! :)

Teď koukám, že i pomocí net view | Select-String '\\' > computers.txt
dostanu výsledek:

\\TOMAS-SERVER
\\TOMAS-XP1
\\TOMAS-XP2
\\XP3

Takže teď se ještě zbavit těch mezer pomocí \\ :))

OMG, strašný problém..

net view |find "\\"

edit: aha, powershell. :-)

edit2: v podstatě ti stačí nastavit delimiter na mezeru a z řádku vybrat vždy první element.

nějak takto:

PS C:\> $file = Get-Content .\test.txt
foreach ($row in $file) {
  $fields = $row.Split(' ')
.
.
.

 

.. jeden ukázkový příklad (načte example.txt kde je výše uvedený text s hostnamy vč. UNC cesty)

$a = gc .\example.txt
$computers = [regex]::matches($a,"(?<=\\\\)\S*")
$pole = ($computers |foreach-object {$_.value})
$pole |%{gwmi -computername $_ win32_bios |select serialnumber}

Zpět do poradny Odpovědět na původní otázku Nahoru