Condividi tramite


about_FileSystem_Provider

Nome provider

FileSystem

Unità

C:, D:, Temp: ...

Funzionalità

Filtro, ShouldProcess

Breve descrizione

Fornisce l'accesso a file e directory.

Descrizione dettagliata

Il provider di FileSystem di PowerShell consente di ottenere, aggiungere, modificare, cancellare ed eliminare file ed directory in PowerShell.

Le unità FileSystem sono uno spazio dei nomi gerarchico contenente le directory e i file nel computer. Un'unità FileSystem può essere un'unità logica o fisica, una directory o una condivisione di rete mappata.

A partire da PowerShell versione 7.0, un'unità chiamata TEMP: viene mappata al percorso temporaneo della directory dell'utente. PowerShell usa il metodo .NET GetTempPath() per determinare il percorso della cartella temporanea. In Windows la posizione è uguale $env:TEMPa . Nei sistemi non Windows, la posizione è uguale $env:TMPDIR o /tmp se la variabile di ambiente non è definita.

Il provider FileSystem supporta i cmdlet seguenti, illustrati in questo articolo.

Tipi esposti da questo provider

I file sono istanze della classe System.IO.FileInfo . Le directory sono istanze della classe System.IO.DirectoryInfo .

PowerShell Extended Type System aggiunge proprietà aggiuntive a questi tipi di oggetti per fornire informazioni aggiuntive. Alcune informazioni sono specifiche della piattaforma. Ad esempio, i valori possibili della proprietà LinkType dipendono dalla piattaforma e dal file system in uso. I file system linux e macOS supportano HardLink e SymLink. Windows NTFS supporta HardLink, SymLink, Junctione diversi altri valori per LinkType.

Quando si usa Get-Item o Get-ChildItem per informazioni su un elemento collegato, la proprietà Mode contiene un l oggetto per indicare che l'elemento è un collegamento. La proprietà LinkType contiene il tipo di collegamento.

AppExecLink i collegamenti vengono creati quando si installa un'applicazione da Microsoft Store. Per AppExecLink i collegamenti, Windows non fornisce valori per le proprietà LinkType o LinkTarget .

Get-Item ~\AppData\Local\Microsoft\WindowsApps\winget.exe

    Directory: C:\Users\user1\AppData\Local\Microsoft\WindowsApps

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
la---            6/8/2023 12:20 PM              0 winget.exe ->

Il provider FileSystem espone i relativi archivi dati eseguendo il mapping di tutte le unità logiche nel computer come unità di PowerShell. Per usare un'unità FileSystem , è possibile modificare la posizione in un'unità usando il nome dell'unità seguito da due punti (:).

Set-Location C:

È anche possibile usare il provider FileSystem da qualsiasi altra unità di PowerShell. Per fare riferimento a un file o a una directory da un'altra posizione, usare il nome dell'unità (C:, D:, ...) nel percorso.

Nota

PowerShell usa gli alias per consentire un modo familiare per usare i percorsi del provider. I comandi come dir e ls sono ora alias per Get-ChildItem, cd è un alias per Set-Location. e pwd è un alias per Get-Location.

Recupero di file e directory

Il Get-ChildItem cmdlet restituisce tutti i file e le directory nel percorso corrente. È possibile specificare un percorso diverso per cercare e usare parametri predefiniti per filtrare e controllare la profondità di ricorsione.

Get-ChildItem

Per altre informazioni sull'utilizzo dei cmdlet, vedere Get-ChildItem.

Copia di file e directory

Il Copy-Item cmdlet copia i file e le directory in un percorso specificato. I parametri sono disponibili per filtrare e ricreare, simile a Get-ChildItem.

Il comando seguente copia tutti i file e le directory nel percorso C:\temp\ della cartella C:\Windows\Temp.

Copy-Item -Path C:\temp\* -Destination C:\Windows\Temp -Recurse -File

Copy-Item sovrascrive i file nella directory di destinazione senza richiedere conferma.

Questo comando copia il a.txt file dalla C:\a directory alla C:\a\bb directory.

Copy-Item -Path C:\a\a.txt -Destination C:\a\bb\a.txt

Copia tutte le directory e i file nella C:\a directory nella C:\c directory. Se una delle directory da copiare esiste già nella directory di destinazione, il comando non riesce a meno che non si specifica il parametro Force .

Copy-Item -Path C:\a\* -Destination C:\c -Recurse

Per altre informazioni, vedere Copy-Item.

Spostamento di file e directory

Questo comando sposta il c.txt file nella C:\a directory nella C:\a\aa directory:

Move-Item -Path C:\a\c.txt -Destination C:\a\aa

Per impostazione predefinita, il cmdlet non sovrascrive un file esistente con lo stesso nome. Per forzare il cmdlet per sovrascrivere un file esistente, specificare il parametro Force .

Non è possibile spostare una directory quando tale directory è la posizione corrente. Quando si usa Move-Item per spostare la directory nella posizione corrente, viene visualizzato questo errore.

C:\temp> Move-Item -Path C:\temp\ -Destination C:\Windows\Temp

Move-Item : Cannot move item because the item at 'C:\temp\' is in use.
At line:1 char:1
+ Move-Item C:\temp\ C:\temp2\
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Move-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.MoveItemCommand

Gestione del contenuto del file

Ottenere il contenuto di un file

Questo comando ottiene il contenuto del file "Test.txt" e li visualizza nella console.

Get-Content -Path Test.txt

È possibile inviare il contenuto del file tramite pipe a un altro cmdlet. Ad esempio, il comando seguente legge il contenuto del Test.txt file e quindi li fornisce come input al cmdlet ConvertTo-Html :

Get-Content -Path Test.txt | ConvertTo-Html

È anche possibile recuperare il contenuto di un file prefissendo il relativo percorso del provider con il segno dollaro ($). Il percorso deve essere racchiuso tra parentesi graffe a causa di restrizioni di denominazione delle variabili. Per altre informazioni, vedere about_Variables.

${C:\Windows\System32\Drivers\etc\hosts}

Aggiungere contenuto a un file

Questo comando aggiunge la stringa "contenuto di test" al Test.txt file:

Add-Content -Path test.txt -Value "test content"

Il contenuto esistente nel Test.txt file non viene eliminato.

Sostituire il contenuto di un file

Questo comando sostituisce il contenuto del Test.txt file con la stringa "contenuto di test":

Set-Content -Path test.txt -Value "test content"

Sovrascrive il contenuto di Test.txt. È possibile usare il parametro Value del New-Item cmdlet per aggiungere contenuto a un file quando lo si crea.

Eseguire il ciclo attraverso il contenuto di un file

Per impostazione predefinita, il Get-Content cmdlet usa il carattere end-of-line come delimitatore, quindi ottiene un file come raccolta di stringhe, con ogni riga come una stringa nel file.

È possibile usare il parametro Delimiter per specificare un delimitatore alternativo. Se lo si imposta sui caratteri che denotano la fine di una sezione o l'inizio di quella successiva, è possibile dividere il file in parti logiche.

Il primo comando ottiene il Employees.txt file e lo divide in sezioni, ognuna delle quali termina con le parole "End of Employee Record" e la salva nella $e variabile.

Il secondo comando usa la notazione della matrice per ottenere il primo elemento nell'insieme in $e. Usa un indice pari a 0, perché le matrici di PowerShell sono basate su zero.

Per altre informazioni sul Get-Content cmdlet, vedere l'argomento della Guida per .Get-Content

Per altre informazioni sulle matrici, vedere about_Arrays.

$e = Get-Content c:\test\employees.txt -Delimited "End Of Employee Record"
$e[0]

Gestione dei descrittori di sicurezza

Visualizzare l'elenco di controllo di accesso per un file

Questo comando restituisce un oggetto System.Security.AccessControl.FileSecurity :

Get-Acl -Path test.txt | Format-List -Property *

Per altre informazioni su questo oggetto, inviare il comando al cmdlet Get-Member o vedere la classe FileSecurity .

Creazione di file e directory

Creare una directory

Questo comando crea la logfiles directory nell'unità C :

New-Item -Path c:\ -Name logfiles -Type directory

PowerShell include anche una mkdir funzione (alias md) che usa il New-Item cmdlet per creare una nuova directory.

Creare un file

Questo comando crea il log2.txt file nella C:\logfiles directory e quindi aggiunge la stringa "log di test" al file:

New-Item -Path c:\logfiles -Name log2.txt -Type file

Creare un file con contenuto

Crea un file denominato log2.txt nella C:\logfiles directory e aggiunge la stringa "log di test" al file.

New-Item -Path c:\logfiles -Name log2.txt -Type file -Value "test log"

Ridenominazione di file e directory

Rinomina un file

Questo comando rinomina il a.txt file nella C:\a directory in b.txt:

Rename-Item -Path c:\a\a.txt -NewName b.txt

Rinominare una directory

Questo comando rinomina la C:\a\cc directory in C:\a\dd:

Rename-Item -Path c:\a\cc -NewName dd

Eliminazione di file e directory

Eliminare un file

Questo comando elimina il Test.txt file nella directory corrente:

Remove-Item -Path test.txt

Eliminare i file usando caratteri jolly

Questo comando elimina tutti i file nella directory corrente che hanno l'estensione .xml del nome file:

Remove-Item -Path *.xml

Avvio di un programma richiamando un file associato

Richiamare un file

Il cmdlet Get-Service per ottenere informazioni sui servizi locali e pipe le informazioni sul cmdlet Export-Csv per archiviare le informazioni nel Services.csv file.

Quindi Invoke-Item apre il services.csv file nel programma associato all'estensione .csv :

Get-Service | Export-Csv -Path services.csv
Invoke-Item -Path services.csv

Recupero di file e cartelle con attributi specificati

Ottenere i file di sistema

Questo comando ottiene i file di sistema nella directory corrente e nelle relative sottodirectory.

Usa il parametro File per ottenere solo file (non directory) e il parametro System per ottenere solo gli elementi con l'attributo "system".

Usa il parametro Recurse per ottenere gli elementi nella directory corrente e tutte le sottodirectory.

Get-ChildItem -File -System -Recurse

Ottenere file nascosti

Questo comando ottiene tutti i file, inclusi quelli nascosti, della directory corrente.

Usa il parametro Attributi con due valori, , !Directory+Hiddenche ottiene file nascosti e !Directory, che ottiene tutti gli altri file.

Get-ChildItem -Attributes !Directory,!Directory+Hidden

dir -att !d,!d+h è l'equivalente di questo comando.

Ottenere file compressi e crittografati

Questo comando ottiene i file della directory corrente che sono compressi o crittografati.

Usa il parametro Attributi con due valori Compressed e Encrypted. I valori sono separati da una virgola , che rappresenta l'operatore "OR".

Get-ChildItem -Attributes Compressed,Encrypted

Parametri dinamici

I parametri dinamici sono parametri di cmdlet aggiunti da un provider di PowerShell e sono disponibili solo quando il cmdlet viene usato nell'unità abilitata per il provider.

Codifica di codifica <>

Specifica la codifica dei file. L'impostazione predefinita è ASCII.

  • ascii: usa la codifica per il set di caratteri ASCII (a 7 bit).
  • bigendianunicode: codifica in formato UTF-16 usando l'ordine di byte big-endian.
  • bigendianutf32: codifica in formato UTF-32 usando l'ordine di byte big-endian.
  • oem: usa la codifica predefinita per i programmi MS-DOS e console.
  • unicode: codifica in formato UTF-16 usando l'ordine di byte little-endian.
  • utf7: codifica in formato UTF-7.
  • utf8: codifica in formato UTF-8.
  • utf8BOM: codifica in formato UTF-8 con Byte Order Mark (BOM)
  • utf8NoBOM: codifica in formato UTF-8 senza byte Order Mark (BOM)
  • utf32: codifica in formato UTF-32.

Cmdlet supportati

  • Add-Content
  • Get-Content
  • Set-Content

Delimitatore <Stringa>

Specifica il delimitatore che Get-Content usa per dividere il file in oggetti mentre legge.

Il valore predefinito è \n, il carattere di fine riga.

Quando si legge un file di testo, Get-Content restituisce una raccolta di oggetti stringa, ognuno dei quali termina con il carattere delimitatore.

L'immissione di un delimitatore che non esiste nel file restituisce Get-Content l'intero file come singolo oggetto non delimitato.

È possibile usare questo parametro per dividere un file di grandi dimensioni in file più piccoli specificando un separatore di file, ad esempio "Fine esempio" come delimitatore. Il delimitatore viene preservato (non rimosso) e diventa l'ultimo elemento di ogni sezione del file.

Nota

Attualmente, quando il valore del parametro Delimiter è una stringa vuota, Get-Content non restituisce nulla. Questo è un problema noto Per forzare Get-Content la restituzione dell'intero file come singola stringa non annullata, immettere un valore che non esiste nel file.

Cmdlet supportati

  • Get-Content

Wait <SwitchParameter>

Attende che venga aggiunto contenuto al file. In caso affermativo, restituisce il contenuto aggiunto. Se il contenuto è stato modificato, restituisce l'intero file.

Quando si attende, Get-Content controlla il file una volta al secondo fino a interromperlo, ad esempio premendo CTRL+C.

Cmdlet supportati

  • Get-Content

Flag attributiExpression <>

Ottiene i file e le cartelle con gli attributi specificati. Questo parametro supporta tutti gli attributi e consente di specificarne complesse combinazioni.

Il parametro Attributes è stato introdotto in Windows PowerShell 3.0.

Il parametro Attributes supporta gli attributi seguenti:

  • Archiviazione
  • Compressed
  • Dispositivo
  • Directory
  • Crittografata
  • Hidden
  • Normal
  • NotContentIndexed
  • Offline
  • ReadOnly
  • ReparsePoint
  • SparseFile
  • Sistema
  • Temporanea

Per una descrizione di questi attributi, vedere l'enumerazione FileAttributes .

Per combinare gli attributi, usare gli operatori seguenti.

  • ! -NON
  • + -E
  • , -O

Tra un operatore e il relativo attributo non sono consentiti spazi. Sono invece consentiti prima delle virgole.

Cmdlet supportati

  • Get-ChildItem

Parametro parametro directory <>

Ottiene le directory (cartelle).

Il parametro Directory è stato introdotto in Windows PowerShell 3.0.

Per ottenere solo le directory, usare il parametro Directory e omettere il parametro File . Per escludere le directory, usare il parametro File e omettere il parametro Directory oppure usare il parametro Attributes .

Cmdlet supportati

  • Get-ChildItem

SwitchParameter del file <>

Ottiene i file.

Il parametro File è stato introdotto in Windows PowerShell 3.0.

Per ottenere solo i file, usare il parametro File e omettere il parametro Directory . Per escludere i file, usare il parametro Directory e omettere il parametro File oppure usare il parametro Attributes .

Cmdlet supportati

  • Get-ChildItem

SwitchParameter nascosto <>

Ottiene solo i file e le directory (cartelle) nascosti. Per impostazione predefinita, Get-ChildItem ottiene solo elementi non nascosti.

Il parametro Hidden è stato introdotto in Windows PowerShell 3.0.

Per ottenere solo elementi nascosti, usare il parametro Hidden , i relativi h alias o ah o il valore Hidden del parametro Attributes . Per escludere gli elementi nascosti, omettere il parametro Hidden o usare il parametro Attributes .

Cmdlet supportati

  • Get-ChildItem

ReadOnly <SwitchParameter>

Ottiene solo i file e le directory (cartelle) di sola lettura.

Il parametro ReadOnly è stato introdotto in Windows PowerShell 3.0.

Per ottenere solo elementi di sola lettura, usare il parametro ReadOnly , il relativo ar alias o il valore ReadOnly del parametro Attributes . Per escludere gli elementi di sola lettura, usare il parametro Attributes .

Cmdlet supportati

  • Get-ChildItem

SwitchParameter di sistema <>

Ottiene solo i file e le directory (cartelle) di sistema.

Il parametro System è stato introdotto in Windows PowerShell 3.0.

Per ottenere solo file e cartelle di sistema, usare il parametro System , il relativo as alias o il valore System del parametro Attributes . Per escludere file e cartelle di sistema, usare il parametro Attributes .

Cmdlet supportati

  • Get-ChildItem

NewerThan <DateTime>

Restituisce $True quando il LastWriteTime valore di un file è maggiore della data specificata. In caso contrario, viene restituito $False.

Immettere un oggetto DateTime , ad esempio quello restituito dal cmdlet Get-Date o una stringa che può essere convertita in un oggetto DateTime , ad esempio "August 10, 2011 2:00 PM".

Cmdlet supportati

OlderThan <DateTime>

Restituisce $True quando il LastWriteTime valore di un file è minore della data specificata. In caso contrario, viene restituito $False.

Immettere un oggetto DateTime , ad esempio quello restituito dal Get-Date cmdlet o una stringa che può essere convertita in un oggetto DateTime , ad esempio "August 10, 2011 2:00 PM".

Cmdlet supportati

  • Test-Path

<stringa Stream>

Gestisce flussi di dati alternativi. Immettere il nome del flusso. I caratteri jolly sono consentiti solo in Get-Item per i comandi e Remove-Item in un'unità del file system.

Cmdlet supportati

  • Add-Content
  • Clear-Content
  • Get-Item
  • Get-Content
  • Remove-Item
  • Set-Content

SwitchParameter non <elaborato>

Ignora i caratteri di nuova riga. Restituisce il contenuto come singolo elemento.

Cmdlet supportati

  • Get-Content

ItemType <String>

Questo parametro consente di specificare il tipo di elemento da creare con New-Item.

I valori disponibili di questo parametro dipendono dal provider corrente in uso.

In un'unità FileSystem sono consentiti i valori seguenti:

  • File
  • Directory
  • Collegamento simbolico
  • giunzione
  • HardLink

Cmdlet supportati

  • New-Item

Uso della pipeline

I cmdlet del provider accettano l'input della pipeline. È possibile usare la pipeline per semplificare l'attività inviando i dati del provider da un cmdlet a un altro cmdlet del provider. Per altre informazioni su come usare la pipeline con i cmdlet del provider, vedere i riferimenti ai cmdlet forniti in questo articolo.

Risorse della Guida

A partire da Windows PowerShell 3.0, è possibile ottenere argomenti della Guida personalizzati per i cmdlet del provider che ne illustrano il comportamento in un'unità di file system.

Per ottenere gli argomenti della Guida personalizzati per l'unità del file system, eseguire un comando Get-Help in un'unità del file system o usare il parametro Path di Get-Help per specificare un'unità del file system.

Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path c:

Vedi anche