Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

PowerShell - Zoeken en verplaatsen van files in folders

Pagina: 1
Acties:

Vraag


  • jenpet
  • Registratie: april 2010
  • Laatst online: 18-06 15:46
Hallo Tweakers,

Ik heb het idee dat ik echt iets simpels over het hoofd zie..

Wat wil ik bereiken ?

Ik wil files in een map + de subdirectories zoeken die ik defineer in mijn lijst.

Nu laat hij ze me wel zien .. maar ik krijg niks in mijn log en hij moved niks

Het lijkt erop dat mijn recurse niks doet terwijl ik geen error krijg.

Dit is wat ik al heb

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$logfile =  "C:\script\log.txt"
$old_document_share = "C:\test"
$new_document_share = "c:\moved"
$date_time = Get-Date -Format g
$names_account = (Get-Content C:\script\orderstomove.csv) -split ","
foreach ($account_name in $names_account)
{
# move foldersmatchthat match account name
write-host $account_name 

$folders = Get-ChildItem $old_document_share -Recurse  | Where-Object{($_.psiscontainer -eq $true) -and ($_.name.Contains($account_name))}
foreach ($folder in $folders)
{
write-host $folder
$get_acl = Get-Acl $folder.FullName | ft $folder.FullName | out-file $logfile -append 
$output_details = $date_time | out-file $logfile -append
$move_item =Move-Item -Path $folder -Destination $new_document_share
}
}

STEAM : http://steamcommunity.com/profiles/76561197992252776/

Alle reacties


  • Brahiewahiewa
  • Registratie: oktober 2001
  • Laatst online: 08:31

Brahiewahiewa

boelkloedig

[quote]jenpet schreef op zaterdag 20 maart 2021 @ 12:00:
...
Nu laat hij ze me wel zien .. maar ik krijg niks in mijn log en hij moved niks
...
[code]
...
$output_details = $date_time | out-file $logfile -append
$move_item =Move-Item -Path $folder -Destination $new_document_share
...[/code]
[/quote]
Niet zo vreemd. Je wijst nu de commando's die zouden moeten loggen en de file zouden moeten verplaatsen, toe aan een string variabele. Maar ze worden nergens uitgevoerd

Yup @Killah_Priest heb gelijk

[Voor 4% gewijzigd door Brahiewahiewa op 21-03-2021 17:16. Reden: voortschrijdend inzicht]

QnJhaGlld2FoaWV3YQ==


  • jenpet
  • Registratie: april 2010
  • Laatst online: 18-06 15:46
Brahiewahiewa schreef op zaterdag 20 maart 2021 @ 12:51:
[...]

Niet zo vreemd. Je wijst nu de commando's die zouden moeten loggen en de file zouden moeten verplaatsen, toe aan een string variabele. Maar ze worden nergens uitgevoerd
Dat doe ik toch in :

foreach ($account_name in $names_account)

Sorry ben geen held in powershell O-)

STEAM : http://steamcommunity.com/profiles/76561197992252776/


Acties:
  • +1Henk 'm!

  • Killah_Priest
  • Registratie: augustus 2001
  • Laatst online: 08:48
Brahiewahiewa schreef op zaterdag 20 maart 2021 @ 12:51:
[...]

Niet zo vreemd. Je wijst nu de commando's die zouden moeten loggen en de file zouden moeten verplaatsen, toe aan een string variabele. Maar ze worden nergens uitgevoerd
Dit is dus niet waar, hij kent de eventuele output van Move-Item toe aan een variable.

Verder ontopic: heb je je script al eens debugged? Of regel voor regel uitgevoerd (in ieder geval tot de regel voordat je de loop start) en gekeken welke waardes je variables hebben? Ik zie ook bv een Write-Host in je foreach loop, geeft deze wel output?

Oja, in je call naar Move-Object bij de Path parameter: wat als je de "fullname" property van $folder meegeeft?

(Ik heb geen zin om de gehele code echt intensief na te lopen, maar bovenstaande dingen zijn sowieso wel de minimale zaken om te controleren)

  • jenpet
  • Registratie: april 2010
  • Laatst online: 18-06 15:46
Killah_Priest schreef op zondag 21 maart 2021 @ 14:52:
[...]

Dit is dus niet waar, hij kent de eventuele output van Move-Item toe aan een variable.

Verder ontopic: heb je je script al eens debugged? Of regel voor regel uitgevoerd (in ieder geval tot de regel voordat je de loop start) en gekeken welke waardes je variables hebben? Ik zie ook bv een Write-Host in je foreach loop, geeft deze wel output?

Oja, in je call naar Move-Object bij de Path parameter: wat als je de "fullname" property van $folder meegeeft?

(Ik heb geen zin om de gehele code echt intensief na te lopen, maar bovenstaande dingen zijn sowieso wel de minimale zaken om te controleren)
ja heb regel voor regel gedebugged alleen hij laat geen errror niks zien , klinkt heel makkelijk maar zo is niet bedoeld ja mijn write host output ook de filenames die hij zoekt maar hij doet er verder niks mee...

en heb ook scripts van internet geplukt ... twijfel bijna of het aan mijn powershell ligt..

STEAM : http://steamcommunity.com/profiles/76561197992252776/


Acties:
  • +2Henk 'm!

  • downtime
  • Registratie: januari 2000
  • Niet online

downtime

Everybody lies

jenpet schreef op maandag 22 maart 2021 @ 23:51:
[...]


ja heb regel voor regel gedebugged alleen hij laat geen errror niks zien , klinkt heel makkelijk maar zo is niet bedoeld ja mijn write host output ook de filenames die hij zoekt maar hij doet er verder niks mee...

en heb ook scripts van internet geplukt ... twijfel bijna of het aan mijn powershell ligt..
Ik snap jouw script niet. Je zegt dat je files zoekt, maar je zoekt geen files. Je zoekt directories: $_.psiscontainer -eq $true

Als je files zoekt dan is dit logischer:

$folders = Get-ChildItem $old_document_share -Recurse -File | Where-Object { $_.name.Contains($account_name) }

Daarnaast is .Contains volgens mij ook case sensitive. Dat is in Powershell vaak niet wat je wilt als je met files werkt.

  • Killah_Priest
  • Registratie: augustus 2001
  • Laatst online: 08:48
downtime schreef op dinsdag 23 maart 2021 @ 17:00:
[...]

Ik snap jouw script niet. Je zegt dat je files zoekt, maar je zoekt geen files. Je zoekt directories: $_.psiscontainer -eq $true

Als je files zoekt dan is dit logischer:

$folders = Get-ChildItem $old_document_share -Recurse -File | Where-Object { $_.name.Contains($account_name) }

Daarnaast is .Contains volgens mij ook case sensitive. Dat is in Powershell vaak niet wat je wilt als je met files werkt.
Plus dat "contains" gebruikt wordt om een exacte match binnen een collection te vinden ipv like waarmee op partial strings gezocht lan worden.

  • downtime
  • Registratie: januari 2000
  • Niet online

downtime

Everybody lies

Killah_Priest schreef op woensdag 24 maart 2021 @ 12:49:
[...]


Plus dat "contains" gebruikt wordt om een exacte match binnen een collection te vinden ipv like waarmee op partial strings gezocht lan worden.
Dat dacht ik eerst ook toen ik Contains zag. Maar de .NET method Contains doet wat anders dan de Powershell operator -Contains. Raar maar waar.

https://docs.microsoft.co...ing.contains?view=net-5.0

  • Killah_Priest
  • Registratie: augustus 2001
  • Laatst online: 08:48
downtime schreef op woensdag 24 maart 2021 @ 13:19:
[...]

Dat dacht ik eerst ook toen ik Contains zag. Maar de .NET method Contains doet wat anders dan de Powershell operator -Contains. Raar maar waar.

https://docs.microsoft.co...ing.contains?view=net-5.0
Ah natuurlijk, dit is String.Contains() en niet IList.Contains() (welke weer op een collection gedaan wordt).

  • SlinkingAnt
  • Registratie: december 2001
  • Niet online
Het lijkt erop dat je de persoonlijke map van bepaalde gebruikers wilt verplaatsen, zodat je dit later kunt opschonen?

Zelf heb ik hiervoor een script gemaakt welke kijkt of de foldername overeenkomt met een actieve gerbuiker in AD. Zo niet, wordt de folder verplaatst naar een archief-locatie om later op te ruimen.

Als je wilt, kan ik 'm hier wel plakken voor je.

En zoals hierboven, geen .contains($account_name) gebruiken, maar -like "$account_name" :).

[Voor 11% gewijzigd door SlinkingAnt op 24-03-2021 13:46]

Intel C2Q 9450@3.3 | Gigabyte P35-DS4 | Sapphire R280x | 4x 2GiB PC6400 Kingston DDR2 | 1x Intel 320SSD 240GB | 2x Spinpoint F1 320GiB

Pagina: 1


Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True