Output filteren na commando in batch script

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Robonnl
  • Registratie: Juni 2013
  • Laatst online: 28-12-2024
Mijn vraag
Ik ben de laatste tijd mij een beetje aan het verdiepen in de batch scripts. Momenteel wil ik een batch script maken die een gebruikersnaam vraagt waarop ik informatie van die gebruiker krijg.

Gaat hier om de commando: Net user *username* /domain

Nu heb ik bovenstaande allemaal werkend via dit script:

@echo off
mode con: cols=100 lines=90
powershell -command "&{$H=get-host;$W=$H.ui.rawui;$B=$W.buffersize;$B.width=100;$B.height=9999;$W.buffersize=$B;}
:loop1
set /p usr="Wat is de gebruikersnaam?"
cls
net user %usr% /domain
if errorlevel==2 goto new
goto last
:new
echo Error: Kan username niet vinden.
pause
goto loop1
:last
goto loop1


Waar ik momenteel tegen aanloop is dat ik de output die deze commando geeft niet allemaal relevant is. Wat ik wil is een aantal regels eruit filteren waar ik alleen het relevante gedeelte overhoud.
Informatie wat er van mij uit moet is:
  • Opmerking
  • Opmerking van gebruiker
  • Landcode
  • Werkstations toegestaan
  • Aanmeldingsscript
  • Toegestane aanmeldingstijden
  • Lidmaatschap lokale groep
  • Lidmaatschap globale groep
Wie o wie kan mij hier mee helpen :) :) :)


Relevante software en hardware die ik gebruik
Kladblok + CMD

Wat ik al gevonden of geprobeerd heb
Ik heb al wat geneuzeld met de FOR command maar hier weinig uit gekomen helaas

Beste antwoord (via Robonnl op 30-06-2016 15:48)


  • GNID
  • Registratie: Januari 2005
  • Niet online
Allereerst: complimenten dat je al zover bent gekomen! Zeker als je net met batch begonnen bent.
"Allertweedst": die regel powershell in je code om je buffer te vergroten heb je niet echt (/echt niet) nodig.
"Aller... ehh.. derdst?" : Powershell is inderdaad de toekomstvaste afslag. Zou ook mijn keuze zijn om dit in te schrijven.


Nu dat allemaal gezegd is, vind ik dat je wel een batch-antwoord verdiend hebt.
Je kunt je output filteren met het commando FIND /i /v "dinges". Die geeft als output alle regels waar "dinges" niet in voorkomt.
Voorbeeld:
code:
1
net user %usr% /domain | find /v /i "comment" | find /i /v "country code"


Filter uit de output alle regels waar comment in voorkomt, filter dit vervolgens .... enz.
Of met FINDSTR. Dan kun je meerdere zoeksleutels gelijktijdig opgeven:
code:
1
net user %usr% /domain | findstr /v /i "comment country"


Waar je dan (eventueel) nog wel rekening mee moet houden, is de taal van het besturingssysteem. Jij ziet landcode, ik zie country code ...

Alle reacties


Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 19-09 19:59

MAX3400

XBL: OctagonQontrol

Ik heb werkelijk geen idee wat je wil doen en waarom. Iets zegt me dat je met Get-ADUser aan de gang moet gaan.

Is het mogelijk dat je even je startpost bijwerkt met je huidige output, wat je nou precies wil bereiken, code-tags gebruiken en aangeven over wat voor omgeving we het hebben (scheelt nogal in de gebruikte scripting).

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • +2 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 20-09 18:58
Robonnl schreef op donderdag 30 juni 2016 @ 14:10:
Mijn vraag
Ik ben de laatste tijd mij een beetje aan het verdiepen in de batch scripts. Momenteel wil ik een batch script maken die een gebruikersnaam vraagt waarop ik informatie van die gebruiker krijg.
STOP!!!!
Batch is verouderd en ik zou mij hier niet in verdiepen. Beter is om voor Powershell te gaan in dit geval.

(tenzij je een goede reden hebt om voor Batch te kiezen uiteraard, maar tegenwoordig is voor Windows beheer Powershell toch echt wel de norm)

Edit : Powershell equivalent van jouw batch script :
PowerShell:
1
2
$UserName = Read-Host -Prompt "Wat is jouw naam username?"
([adsisearcher]"SamAccountName=$($UserName)").FindOne().Properties


De eerste regel zet de input van de betreffende username in de variable $UserName. De 2e regel roept de ADSISearcher aan met als filter de betreffende samaccountname, zoekt vervolgens via de FindOne() method en geeft daarna de property genaamd "Properties" weer.

In 2 regels (en het kan zelfs met gemak in 1 regel) bereik je hetzelfde als met al jouw regels batch script.
Om alleen de properties weer te geven die jij wilt hebben kun je de output weer dmv Select-Object aanpassen zodat je alleen de relevante velden te zien krijgt. (omdat de output hier een Hashtable is kun je niet zo 123 met select-object filteren bedenk ik mij nu... het filteren hiervan is echter niet zo moeilijk)

[ Voor 44% gewijzigd door Killah_Priest op 30-06-2016 14:23 ]


Acties:
  • 0 Henk 'm!

  • Robonnl
  • Registratie: Juni 2013
  • Laatst online: 28-12-2024
Begrijpelijk en wellicht heb je ook gelijk :). Wil gewoonweg een simpel scriptje maken die een bepaalde gedeelte van de output laat zien van de commando net user *username* /domain

Als ik mijn script nu uitvoer krijg ik dit:

http://www.ozfo.nl/images/cmd/img201.jpg

Acties:
  • 0 Henk 'm!

  • Robonnl
  • Registratie: Juni 2013
  • Laatst online: 28-12-2024
Killah_Priest schreef op donderdag 30 juni 2016 @ 14:15:
[...]


STOP!!!!
Batch is verouderd en ik zou mij hier niet in verdiepen. Beter is om voor Powershell te gaan in dit geval.

(tenzij je een goede reden hebt om voor Batch te kiezen uiteraard, maar tegenwoordig is voor Windows beheer Powershell toch echt wel de norm)

Edit : Powershell equivalent van jouw batch script :
PowerShell:
1
2
$UserName = Read-Host -Prompt "Wat is jouw naam username?"
([adsisearcher]"SamAccountName=$($UserName)").FindOne().Properties


De eerste regel zet de input van de betreffende username in de variable $UserName. De 2e regel roept de ADSISearcher aan met als filter de betreffende samaccountname, zoekt vervolgens via de FindOne() method en geeft daarna de property genaamd "Properties" weer.

In 2 regels (en het kan zelfs met gemak in 1 regel) bereik je hetzelfde als met al jouw regels batch script.
Om alleen de properties weer te geven die jij wilt hebben kun je de output weer dmv Select-Object aanpassen zodat je alleen de relevante velden te zien krijgt. (omdat de output hier een Hashtable is kun je niet zo 123 met select-object filteren bedenk ik mij nu... het filteren hiervan is echter niet zo moeilijk)
Oké oké dit lijkt te werken echter wanneer ik van die 2 regelsn een .ps1 file van laat hij wel heel snel de output zien maar blijft niet hangen. Nu weet ik dat in de batch taal je de pause command kan toevoegen.

Ook heb ik in mijn huidige script dusdanig ingesteld dat hij terug gaat naar het begin als er een input is ingevuld en output is geleverd.

Enig idee wat me een beetje op weg kan helpen zodat ik het daarna kan filteren? :)

Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 19-09 19:59

MAX3400

XBL: OctagonQontrol

Robonnl schreef op donderdag 30 juni 2016 @ 14:35:
[...]


Oké oké dit lijkt te werken echter wanneer ik van die 2 regelsn een .ps1 file van laat hij wel heel snel de output zien maar blijft niet hangen. Nu weet ik dat in de batch taal je de pause command kan toevoegen.
PowerShell:
1
2
$UserName = Read-Host -Prompt "Wat is jouw naam username?"
([adsisearcher]"SamAccountName=$($UserName)").FindOne().Properties | Out-File c:\scripts\test.txt

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • Robonnl
  • Registratie: Juni 2013
  • Laatst online: 28-12-2024
MAX3400 schreef op donderdag 30 juni 2016 @ 14:39:
[...]

PowerShell:
1
2
$UserName = Read-Host -Prompt "Wat is jouw naam username?"
([adsisearcher]"SamAccountName=$($UserName)").FindOne().Properties | Out-File c:\scripts\test.txt
Ik wil er geen apart txt bestand van de output. Mijn gewenste situatie is:

*1 scherm die in een loop draait en vraagt naar gebruikersnaam.
*Als gebruikersnaam is ingevuld dat hij specifieke opties laat zien die ik zelf kies en niet de gehele lijst
*Scherm moet gewoon blijven staan en dus niet afsluiten na 1 x username invullen.

Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 19-09 19:59

MAX3400

XBL: OctagonQontrol

Ga dan even zelf op zoek naar Powershell-commando's?

code:
1
Start-Sleep -s 10

geeft 10 seconden pauze

En jouw voorbeeldje uit de startpost kan je ook ombouwen naar Powershell; dus met error-catching, forward/backward pointers op basis van condities etc.

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • +1 Henk 'm!

  • Robonnl
  • Registratie: Juni 2013
  • Laatst online: 28-12-2024
MAX3400 schreef op donderdag 30 juni 2016 @ 14:48:
Ga dan even zelf op zoek naar Powershell-commando's?

code:
1
Start-Sleep -s 10

geeft 10 seconden pauze

En jouw voorbeeldje uit de startpost kan je ook ombouwen naar Powershell; dus met error-catching, forward/backward pointers op basis van condities etc.
Ben al bezig maar niemand leert chinees in 10 minuten :+ :+
Ik kijk nog wel even verder dan en pruts nog wel even wat aan.

Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 19-09 19:59

MAX3400

XBL: OctagonQontrol

Robonnl schreef op donderdag 30 juni 2016 @ 14:52:
[...]

Ben al bezig maar niemand leert chinees in 10 minuten :+ :+
Ik kijk nog wel even verder dan en pruts nog wel even wat aan.
_O- Je hebt gelijk en PowerShell is even wat nieuwer/anders dan wat je gewend bent. Vlieg het desnoods andersom aan: welke gegevens wil je absoluut zien, hoe heten die gegevens in je AD (op te zoeken met ADSIEdit) en mogelijk kan je dan je filters reverse engineeren naar PowerShell.

Kijk ook eens naar de Active Directory cmdlets van PowerShell; kan je ook ontzettend veel mee :)

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • Robonnl
  • Registratie: Juni 2013
  • Laatst online: 28-12-2024
MAX3400 schreef op donderdag 30 juni 2016 @ 14:57:
[...]

_O- Je hebt gelijk en PowerShell is even wat nieuwer/anders dan wat je gewend bent. Vlieg het desnoods andersom aan: welke gegevens wil je absoluut zien, hoe heten die gegevens in je AD (op te zoeken met ADSIEdit) en mogelijk kan je dan je filters reverse engineeren naar PowerShell.

Kijk ook eens naar de Active Directory cmdlets van PowerShell; kan je ook ontzettend veel mee :)
Hehe het is net even wat anders dan ik gewend ben inderdaad. In ieder geval bedankt voor de tips! Ik ga gewoon even wat meer verdiepen erin :). Thanks voor je input!

Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 19-09 19:59

MAX3400

XBL: OctagonQontrol

Robonnl schreef op donderdag 30 juni 2016 @ 14:59:
[...]

Hehe het is net even wat anders dan ik gewend ben inderdaad. In ieder geval bedankt voor de tips! Ik ga gewoon even wat meer verdiepen erin :). Thanks voor je input!
Niet verder vertellen: https://gallery.technet.microsoft.com/scriptcenter/ d:)b

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • Beste antwoord
  • +2 Henk 'm!

  • GNID
  • Registratie: Januari 2005
  • Niet online
Allereerst: complimenten dat je al zover bent gekomen! Zeker als je net met batch begonnen bent.
"Allertweedst": die regel powershell in je code om je buffer te vergroten heb je niet echt (/echt niet) nodig.
"Aller... ehh.. derdst?" : Powershell is inderdaad de toekomstvaste afslag. Zou ook mijn keuze zijn om dit in te schrijven.


Nu dat allemaal gezegd is, vind ik dat je wel een batch-antwoord verdiend hebt.
Je kunt je output filteren met het commando FIND /i /v "dinges". Die geeft als output alle regels waar "dinges" niet in voorkomt.
Voorbeeld:
code:
1
net user %usr% /domain | find /v /i "comment" | find /i /v "country code"


Filter uit de output alle regels waar comment in voorkomt, filter dit vervolgens .... enz.
Of met FINDSTR. Dan kun je meerdere zoeksleutels gelijktijdig opgeven:
code:
1
net user %usr% /domain | findstr /v /i "comment country"


Waar je dan (eventueel) nog wel rekening mee moet houden, is de taal van het besturingssysteem. Jij ziet landcode, ik zie country code ...

Acties:
  • 0 Henk 'm!

  • Robonnl
  • Registratie: Juni 2013
  • Laatst online: 28-12-2024
GNID schreef op donderdag 30 juni 2016 @ 15:27:
Allereerst: complimenten dat je al zover bent gekomen! Zeker als je net met batch begonnen bent.
"Allertweedst": die regel powershell in je code om je buffer te vergroten heb je niet echt (/echt niet) nodig.
"Aller... ehh.. derdst?" : Powershell is inderdaad de toekomstvaste afslag. Zou ook mijn keuze zijn om dit in te schrijven.


Nu dat allemaal gezegd is, vind ik dat je wel een batch-antwoord verdiend hebt.
Je kunt je output filteren met het commando FIND /i /v "dinges". Die geeft als output alle regels waar "dinges" niet in voorkomt.
Voorbeeld:
code:
1
net user %usr% /domain | find /v /i "comment" | find /i /v "country code"


Filter uit de output alle regels waar comment in voorkomt, filter dit vervolgens .... enz.
Of met FINDSTR. Dan kun je meerdere zoeksleutels gelijktijdig opgeven:
code:
1
net user %usr% /domain | findstr /v /i "comment country"


Waar je dan (eventueel) nog wel rekening mee moet houden, is de taal van het besturingssysteem. Jij ziet landcode, ik zie country code ...
Held!! _/-\o_ _/-\o_ Enige wat helaas wel zichtbaar blijft is de output van de Lidmaatschap Globale groep (alle rechten die de user heeft in het AD). Het woord Lidmaatschap Globale groep verdwijnt wel maar de output blijft helaas wel gewoon staan. Heb je wellicht enig idee?? Dit is het laatste wat ik zoek :)!

*Edit* Ik heb het al gevonden! Thanks voor jullie input!

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 20-09 18:58
Robonnl schreef op donderdag 30 juni 2016 @ 15:38:
[...]


Held!! _/-\o_ _/-\o_ Enige wat helaas wel zichtbaar blijft is de output van de Lidmaatschap Globale groep (alle rechten die de user heeft in het AD). Het woord Lidmaatschap Globale groep verdwijnt wel maar de output blijft helaas wel gewoon staan. Heb je wellicht enig idee?? Dit is het laatste wat ik zoek :)!

*Edit* Ik heb het al gevonden! Thanks voor jullie input!
Markeer je dan nog wel even het antwoord van GNID als antwoord ? :D

Acties:
  • 0 Henk 'm!

  • Robonnl
  • Registratie: Juni 2013
  • Laatst online: 28-12-2024
Killah_Priest schreef op donderdag 30 juni 2016 @ 15:42:
[...]


Markeer je dan nog wel even het antwoord van GNID als antwoord ? :D
Done! oOo oOo
Pagina: 1