Powershell - Manier uitlezen variabele

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • technoaddict
  • Registratie: Juni 2006
  • Laatst online: 05-10 14:51
Hoi,

Ik had laatst een klein script geschreven met parameters als -Context en -Pattern erin. Bijvoorbeeld;

$writers = vssadmin list writers | Select-String -Context 0,4 -Pattern 'WMI Writer'

Commando zoekt in $writers naar WMI Writer en toont vanaf dan de 1e 4 regels.

Het zelfde had ik verwacht bij;

$patt = Get-MailboxFolderPermission -Identity username:\Agenda | Select-String -context 0,4 -Pattern Default

Maar de output blijft leeg. Terwijl als ik de | en wat erna komt weg laat de variabele wel gevuld wordt met inhoud, en het woordje Default erin voor komt.

Als ik $patt -Contains "Default" doe dan krijg ik ook een False. Waarom zou ik niet in $patt kunnen zoeken?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Powershell-vragen horen in Windows Clients, zie Waar hoort mijn topic?. ;)

PRG>>WOS

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 09:12

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

technoaddict schreef op zondag 06 december 2015 @ 10:47:
Als ik $patt -Contains "Default" doe dan krijg ik ook een False. Waarom zou ik niet in $patt kunnen zoeken?
Lees gewoon eerst het hele object in je variable.

code:
1
$patt = Get-MailboxFolderPermission -Identity username:\Agenda


Daarna kun je het object zo manipuleren dat je de gewenste output krijgt.

"$patt[0]" geeft dan bv de informatie terug over de eerste ACL die op de mailbox staat
"$patt[1]" de info over de tweede.
"$patt[1].user" geeft de username die rechten heeft binnen de tweede ACL.

Powershell is object-based, je moet qua denkwijze dan afstappen van het afvangen van stukken tekst als uitkomst van een commando. Je wilt het object afvangen, en daar "dingen" mee gaan doen.

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Acties:
  • 0 Henk 'm!

  • technoaddict
  • Registratie: Juni 2006
  • Laatst online: 05-10 14:51
Will do NMe.
Thanks Mark, zal eens kijken wat ik ermee kan doen om dat de krijgen wat ik wil.

Edit: Dit werkt toch idd allemaal een stuk beter en ook simpeler.. Merci.

[ Voor 28% gewijzigd door technoaddict op 06-12-2015 13:41 ]


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 03-10 11:19
Wellicht de verkeerde plek om hier een "discussie" over te voeren (ik weet niet hoe dit anders aangemerkt moet worden) maar is het niet tijd om het beleid hierin niet deels te herzien?

Powershell is sinds versie 3 enorm vooruit gegaan qua mogelijkheiden : met versie 5 is ook de mogelijkheid om echte classes (native in POSH) aan te maken toegevoegd.
Je kunt in Powershell veel, erg veel (je kunt in feite echt een applicatie of game schrijven in POSH, velen hebben dit al gedaan) omdat je gewoon volledige toegang tot het .net framework hebt.
Ik begrijp dat er uiteraard een onderscheid gemaakt moet worden met bepaalde vragen, echter is het zo dat als ik een probleem heb met een Powershell script van bv 2000 regels waarvan vrijwel alles bestaat uit .net code ipv Powershell CMDlets dan verwacht ik niet zoveel bruikbare antwoorden te krijgen in WOS in tegenstelling tot PRG (waar genoeg .net specialisten rondneuzen).

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Vragen over Powershell die duidelijk gaan over het daadwerkelijk bedenken van programmalogica laten we best in PRG staan hoor. ;) Maar vragen zoals deze die eigenlijk alleen over het juiste gebruik van bepaalde commando's gaan vinden gewoon meer aftrek in dit forum.

Verder discussie daarover mag trouwens in LA of in de eventuele feedbacktopics.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • technoaddict
  • Registratie: Juni 2006
  • Laatst online: 05-10 14:51
Vervolg op mijn oorspronkelijke vraag. De output die ik wil hebben is nu anders dan gisteren.
Ik heb een lijst met gebruikersnamen in een array genaamd $array. Nu heb ik het volgende

foreach ($arr in $array) { Get-MailboxFolderPermission -Identity $_":\Agenda"}

Op zich werkt dit prima, maar ik zou heel graag de gebruikersnaam waar de permissies van getoont worden erbij hebben in het overzicht. Anders is het een elle lange lijst met Agenda's van alle gebruikers zonder te zien van welke gebruiker de agenda is.

Heb natuurlijk van alles getest, als

foreach ($arr in $array) { write-host $arr , Get-MailboxFolderPermission -Identity $_":\Agenda"}
etc
etc

Maar krijg het niet voor elkaar en weet ook niet met welke argumenten / steekwoorden ik moet googlen om er achter gekomen hoe ik dit voor elkaar krijg. Iemand de tip?

Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

technoaddict schreef op maandag 07 december 2015 @ 21:26:
Heb natuurlijk van alles getest, als

foreach ($arr in $array) { write-host $arr , Get-MailboxFolderPermission -Identity $_":\Agenda"}

Maar krijg het niet voor elkaar en weet ook niet met welke argumenten / steekwoorden ik moet googlen om er achter gekomen hoe ik dit voor elkaar krijg. Iemand de tip?
Ik heb helaas geen kaas van Exchange gegeten, dus misschien ga ik hier finaal de fout in, maar normaal gesproken moet je dit met deze code kunnen doen:

PowerShell:
1
2
3
4
Foreach ($arr in $array) {
    Write-Host $arr
    Get-MailboxFolderPermission -Identity $arr+":\Agenda"
}


$_ moet je hier niet gebruiken. Eén verschil tussen ForEach en ForEach-Object is nu juist dat je bij ForEach niet $_ gebruikt maar zelf je variabele een naam geeft ($arr in dit geval). $_ heeft daardoor in dit stukje code geen betekenis.
Microsoft maakt het alleen wat verwarrend door ForEach ook als alias voor ForEach-Object te gebruiken waardoor het soms lijkt alsof je die twee door elkaar kunt gebruiken.

[ Voor 0% gewijzigd door downtime op 08-12-2015 23:39 . Reden: Eén haakje kan veel verschil maken. ]

Pagina: 1