De Scripts PowerShell Get - ChildItem
J'ai écrit un script qui sera utilisé pour l'archivage des fichiers journaux à partir d'un serveur. Je suis en assez bonne forme avec tout mais ressemble ou pas de Get-ChildItem...
La question que je semble avoir, c'est que lorsque Get-ChildItem n'est pas récursive et -Include
est présent avec un seul filtre, il est ignoré! Ou, je suis en train de faire quelque chose de mal (probablement).
J'ai nettoyé à la sortie un peu...
PS C:\foo> Get-childitem -path "c:\foo"
Name
----
bar1.doc
bar2.doc
bar3.doc
foo1.txt
foo2.txt
foo3.txt
PS C:\foo> Get-childitem -path "c:\foo" -Include *.txt
PS C:\foo> Get-childitem -path "c:\foo" -Include *.txt -recurse
Name
----
foo1.txt
foo2.txt
foo3.txt
Sooo??? J'ai eu un fantastique où tout ce que j'avais à faire était de branche à un chemin d'accès au script qui n'ont pas la profondeur de l'interrupteur. (En passant, est-il possible de variable appliquer des paramètres afin d'éviter la duplication de code chemins où la seule variabilité des paramètres à une applet de commande?)
De toute façon, voici mon script pour l'exhaustivité, en plus de mon problème avec Get-ChildItem.
function MoveFiles()
{
Get-ChildItem -Path $source -Recurse -Include $ext | where { $_.LastWriteTime -lt (Get-Date).AddDays(-$days) } | foreach {
$SourceDirectory = $_.DirectoryName;
$SourceFile = $_.FullName;
$DestinationDirectory = $SourceDirectory -replace [regex]::Escape($source), $dest;
$DestionationFile = $SourceFile -replace [regex]::Escape($source), $dest;
if ($WhatIf){
#Write-Host $SourceDirectory;
#Write-Host $DestinationDirectory;
Write-Host $SourceFile -NoNewline
Write-Host " moved to " -NoNewline
Write-Host $DestionationFile;
}
else{
if ($DestinationDirectory)
{
if ( -not [System.IO.Directory]::Exists($DestinationDirectory)) {
[void](New-Item $DestinationDirectory -ItemType directory -Force);
}
Move-Item -Path $SourceFile -Destination $DestionationFile -Force;
}
}
}
}
Eh bien, ce est un comportement documenté et j'ai besoin d'RTFM. Je vous jure j'ai fait une, mais je me suis éclipsée. Merci à tous!
OriginalL'auteur Bennett Dill | 2009-09-02
Vous devez vous connecter pour publier un commentaire.
La réponse est dans la description complète de la commande (get-help get-childitem -plein):
Donc la suite serait de travailler sans recurse.
Nah. Blâmer MS pour faire cette commande trop capricieux.
Fondamentalement, le Chemin et Recurse déterminer votre liste initiale des objets, puis ceux-ci sont filtrées par les Inclure et à Exclure. Donc, "C:\foo" vous donnera un répertoire info objet. "C:\foo*" serait vous donner tout le contenu de "toto".
OriginalL'auteur hythlodayr
Ce comportement est normal, mais il faut reconnaître que la confusion. À partir de la Get-ChildItem fichier d'aide:
Récupère uniquement les éléments spécifiés. La valeur de ce paramètre qualifie le paramètre Path. Entrez un chemin d'accès de l'élément ou de modèle, tels que "*.txt". Les caractères génériques sont autorisés.
Le paramètre Inclure n'est efficace que lorsque la commande inclut le Recurse paramètre ou le chemin mène au contenu d'un répertoire, tels que C:\Windows*, où le caractère générique spécifie le contenu du répertoire C:\ Windows.
ps> l'aide de la dir -plein | plus
Espère que cette aide,
-Oisin
OriginalL'auteur x0n
Je ne peux pas vous dire exactement pourquoi (mais je vais continuer à chercher), mais le comportement est documenté dans l'Aide pour Get-ChildItem:
OriginalL'auteur EBGreen