Excel lijst inlezen via een script in Powershell

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • STYLUS3530
  • Registratie: Juni 2015
  • Laatst online: 31-01-2024
Hello Folks

Ik heb een script in Powershell proberen te schrijven, zal even kort uitleggen wat de bedoeling is: Ik haal uit de AD de aanmeldnaam van een persoon(VoornaamNaam), vervolgens controleer ik of het script mag doorlopen worden voor deze persoon(VoornaamNaam1), als het script niet mag doorlopen worden, beëindig ik het script. Vervolgens gaat het script vanzelf verder, heb hier als voorbeeld EXCEL laten opstarten.

Nu is het zo dat als ik dit voor meerdere personen zou moeten laten testen, ik regels moet bijvoegen(hieronder als voorbeeld “VoornaamNaam2”).

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#Oefen Excel starten vanuit gebruikersnaam
#Omgevings variabelen
$AppData=(Get-Item env:appdata).value
$SigPath = '\Microsoft\Signatures'
$LocalSignaturePath = $AppData+$SigPath
$RemoteSignaturePathFull = $SigSource

#Haal info uit de AD van de actuele gebruiker
$UserName = $env:username
$Filter = "(&(objectCategory=User)(samAccountName=$UserName))"
$Searcher = New-Object System.DirectoryServices.DirectorySearcher
$Searcher.Filter = $Filter
$ADUserPath = $Searcher.FindOne()
$ADUser = $ADUserPath.GetDirectoryEntry()
$ADDisplayName = $ADUser.DisplayName
$ADEmailAddress = $ADUser.mail
$ADTitle = $ADUser.title
$ADDescription = $ADUser.description
$ADTelePhoneNumber = $ADUser.TelephoneNumber
$strFax = $ADUser.facsimileTelephoneNumber 
$ADMobile = $ADUser.mobile
$ADStreetAddress = $ADUser.streetaddress
$ADCity = $ADUser.l
$ADCustomAttribute1 = $ADUser.extensionAttribute1
$ADModify = $ADUser.whenChanged

#Testen of het een bepaalde persoon is die gepersonaliseerde handtekening heeft
$value = $UserName
#Testen op VoornaamNaam1
if ( $value -like 'VoornaamNaam1')
 {
    exit
 }
#Testen op VoornaamNaam2
if ( $value -like 'VoornaamNaam2')
 {
    exit
 }

#Open Template
$MSExcel = New-Object -comobject Excel.Application 
$MSExcel.Visible = $True


Nu is het zo dat ik graag een excell/csv bestand in de map(waar het script staat) zou willen plaatsen waarin de namen van uitzondering staan, dit bestand zou ik op elk moment kunnen wijzigen afhankelijk van de noden, dus het aantal namen zou kunnen wijzigen

Hieronder even een voorbeeld van dit bestand:
Jan
Piet
Jef
Sabrina
Wendy
Louis
Peter


Het script zou dus moeten lezen hoeveel personen in het excell(csv) bestand staan, vervolgens via een lus alle namen inlezen en testen of een van de namen erin voorkomt, indien niet zou het dan Excell moeten openen.

Weet iemand hoe ik dit het beste in Powershell aanpak?

Alvast bedankt.

STYLUS3530

[ Voor 0% gewijzigd door Janoz op 25-09-2023 15:29 ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 05-06 22:44

Janoz

Moderator Devschuur®

!litemod

Ten eerste is het leesbaarder om code daadwerkelijk tusen code tags te zetten, dat maakt het leesbaarder.


Om je vraag te beantwoorden: Ja, je kunt een lus gebruiken in powershell:

https://learn.microsoft.c...reach?view=powershell-7.3

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

STYLUS3530 schreef op maandag 25 september 2023 @ 09:12:

Ik heb een script in Powershell proberen te schrijven, zal even kort uitleggen wat de bedoeling is: Ik haal uit de AD de aanmeldnaam van een persoon(VoornaamNaam), vervolgens controleer ik of het script mag doorlopen worden voor deze persoon(VoornaamNaam1), als het script niet mag doorlopen worden, beëindig ik het script. Vervolgens gaat het script vanzelf verder, heb hier als voorbeeld EXCEL laten opstarten.
Het is me maar half duidelijk wat je wilt maar ik denk dat het zoiets is:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$LocalSignaturePath = Join-Path -Path $Env:AppData -ChildPath 'Microsoft\Signatures'
$HasSignature       = Test-Path -Path $LocalSignaturePath

$ExcludedUsersList  = Join-Path -Path $PSScriptRoot -ChildPath 'Users.csv'
$ExcludedUsers      = Import-Csv -Path $UserListPath | Select-Object -ExpandProperty Username
$Searcher           = New-Object -TypeName System.DirectoryServices.DirectorySearcher

if ($ExcludedUsers -contains $Env:UserName) {
    Write-Host 'User in uitzonderingen gevonden.'
    exit
}

$Searcher.Filter = ('(&(objectCategory=User)(samAccountName={0}))' -f $Env:UserName)

$ADUserPath = $Searcher.FindOne()
$ADUser     = $ADUserPath.GetDirectoryEntry()

if ($HasSignature) {
    $ADDisplayName      = $ADUser.DisplayName
    $ADEmailAddress     = $ADUser.mail
    $ADTitle            = $ADUser.title
    $ADDescription      = $ADUser.description
    $ADTelePhoneNumber  = $ADUser.TelephoneNumber
    $ADFax              = $ADUser.facsimileTelephoneNumber 
    $ADMobile           = $ADUser.mobile
    $ADStreetAddress    = $ADUser.streetaddress
    $ADCity             = $ADUser.l
    $ADCustomAttribute1 = $ADUser.extensionAttribute1
    $ADModify           = $ADUser.whenChanged

    Write-Host 'User met een signature gevonden. Doe hier iets met Excel.'
} else {
    Write-Host 'User gevonden maar heeft geen signature.'
}


Met onderstaande als voorbeeld van de CSV (de eerste regel moet Username heten):

code:
1
2
3
4
5
6
7
8
Username
Jan
Piet
Jef
Sabrina
Wendy
Louis
Peter