Gestione efficiente di DFS con script PowerShell

Preparati a imparare come scrivere script PowerShell DFS migliori utilizzando le conoscenze acquisite in questo tutorial. In questo post, imparerai tutto sulla gestione dei collegamenti DFS in PowerShell!

Questo post del blog ha un video accompagnatore creato da Scott Hurst, collaboratore di TechSnips. Sentiti libero di guardarlo o, se preferisci il testo, continua a leggere!

I miei ultimi video

I collegamenti del file system distribuito (DFS) riducono la complessità del lavoro con le condivisioni di file di rete. I collegamenti DFS consentono agli utenti e alle applicazioni di accedere a un percorso virtuale per connettersi a cartelle condivise. È possibile creare collegamenti DFS con PowerShell.

Che tu stia gestendo Active Directory o un altro prodotto DFS, scrivere script PowerShell DFS ti aiuterà a gestire qualsiasi problema che incontri.

Questo spazio dei nomi virtuale consente agli amministratori di presentare cartelle condivise situate su server diversi o persino cambiare la posizione di una cartella condivisa, completamente in modo trasparente per i consumatori di tale cartella.

Gli utenti non dovranno aggiornare i segnalibri e le applicazioni non dovranno essere aggiornate con nuovi percorsi quando cambiano i server di file.

Vantaggi di DFS

Per gli utenti, l’accesso alle cartelle condivise di rete è semplificato nel formato <spazio dei nomi>\NomeCartella, riducendo la complessità associata alle cartelle archiviate su server remoti.

Per le applicazioni, i percorsi codificati riguardanti le risorse di rete non devono essere modificati a causa di un cambio nel percorso di rete. Un semplice aggiornamento al DFS link e l’applicazione continuerà ad accedere alle risorse nella loro nuova posizione.

Requisiti per il ruolo del server DFS

  • Active Directory
  • Ruolo dei servizi File e Archiviazione installato su un server Windows
  • Windows Server (Canale Semi-Annuali)
  • Windows Server 2016
  • Windows Server 2012 R2
  • Windows Server 2012
  • Windows Server 2008 R2 Datacenter/Enterprise

Prerequisiti

  • Un account amministratore con le autorizzazioni adeguate
  • Strumenti RSAT con “Strumenti dei servizi File – Strumenti di gestione DFS” installati

Preparazione per gli script di PowerShell DSC

Innanzitutto, scarica e installa RSAT. Successivamente, è necessario installare tutte le funzionalità di Windows necessarie. Questo installerà l’interfaccia grafica Gestione DFS, il modulo Spazi dei nomi DFS per PowerShell di Windows per creare link DFS con PowerShell e gestirli, e strumenti a riga di comando, ma non installerà alcun servizio DFS sul server.

Install-WindowsFeature FS-DFS-Namespace, RSAT-DFS-Mgmt-Con

Comandi DFS comuni

È possibile amministrare i namespace utilizzando l’interfaccia grafica Gestione DFS, i cmdlet DFS Namespace (DFSN) in PowerShell, i comandi DfsUtil o script che richiamano WMI.

Alcuni comandi comuni di PowerShell sono:

  • Get-DfsnRoot – Scopri tutti i namespace DFS nel dominio corrente – Comunemente utilizzato per verificare i namespace disponibili nel dominio corrente
  • New-DfsnFolder – Crea un nuovo nome di cartella DFS
    – Comunemente utilizzato per creare una nuova cartella DFS in un namespace
  • New-DfsnFolderTarget – Assegna percorsi a un nome di cartella DFS
    – Comunemente utilizzato per assegnare uno o più percorsi di cartelle di rete a una cartella DFS
  • Remove-DfsnFolderTarget – Rimuove un percorso da una cartella DFS ma non rimuove la cartella DFS.
    – Comunemente utilizzato per rimuovere uno o più percorsi di cartelle di rete da una cartella DFS
  • Remove-DfsnFolder – Rimuove una cartella e tutti i suoi percorsi
    – Comunemente utilizzato per rimuovere una cartella DFS da un namespace

Trovare i namespace DFS

Inizieremo ottenendo un’idea di tutti i namespace online e disponibili nel dominio corrente utilizzando il cmdlet Get-DfsnRoot.

$Domain = 'tech.io'
(Get-DfsnRoot -Domain $Domain).Where( {$_.State -eq 'Online'} ) | Select-Object -ExpandProperty Path

Questo mostra che ci sono due namespace che sono Online in questo dominio.

Finding DFS roots

Trovare le cartelle DFS

Utilizzando il comando Get-DfsnFolder possiamo elencare le cartelle DFS in ogni namespace.

$Domain = 'tech.io'
Get-DfsnFolder -Path "\\$Domain\AppRoot\*" | Select-Object -ExpandProperty Path
Get-DfsnFolder -Path "\\$Domain\DFSRoot\*" | Select-Object -ExpandProperty Path

Da questa uscita, possiamo vedere che nel namespace AppRoot non esiste una cartella DFS chiamata PowerShell.

Finding DFS folders

In questo esempio, abbiamo una cartella replicata chiamata PowerShell sui nostri tre server di file; FileServer01, FileServer02 e Datacenter.

Lo scopo è condividere questa cartella replicata con i nostri amministratori utilizzando un singolo percorso.

Per fare ciò, creeremo una nuova cartella DFS link nel namespace AppRoot chiamata PowerShell utilizzando il comando New-DfsnFolder e la indirizzeremo alla condivisione di file del server del datacenter. Imposteremo lo stato della cartella DFS a Online e lo stato del TargetPath a Online.

$Domain = 'tech.io'
try {
    Get-DfsnFolderTarget -Path "\\$Domain\AppRoot\PowerShell" -ErrorAction Stop
} catch {
    Write-Host "Path not found. Clear to proceed" -ForegroundColor Green
}

$NewDFSFolder = @{
    Path = "\\$Domain\AppRoot\PowerShell"
    State = 'Online'
    TargetPath = '\\datacenter\FileShare\PowerShell'
    TargetState = 'Online'
    ReferralPriorityClass = 'globalhigh'
}

New-DfsnFolder @NewDFSFolder

# Verifica che la cartella esista:
Get-DfsnFolderTarget -Path "\\$Domain\AppRoot\PowerShell"

# Verifica che il nuovo link DFS funzioni utilizzando Windows Explorer
Invoke-Expression "explorer '\\$Domain\AppRoot\PowerShell\'"

Nella GUI di Gestione DFS, possiamo vedere che la cartella DFS PowerShell non esiste.

Inspecting DFS folders in the GUI
The folder target UNC path

Ora eseguiamo Windows Explorer da una console di PowerShell e verifichiamo che non esista.

Invoke-Expression "explorer "\\$Domain\AppRoot\PowerShell"

Se la cartella non esiste, scriverà l’output Path not found. Clear to proceed in testo verde nella finestra del terminale come puoi vedere di seguito.

Dall’output vediamo che la cartella è stata creata, la classe di priorità di rinvio è impostata su Global-High e lo Stato è Online.

Inspecting DFS referral priority class and state

La GUI conferma anche ciò che PowerShell ci ha detto.

Inspecting DFS referral priority class and state

e il nostro percorso è ora disponibile in Windows Explorer.

DFS path available in Windows Explorer

Creazione dei target della cartella DFS.

Ora che abbiamo creato con successo la cartella DFS di Powershell nel namespace, aggiungiamo un percorso target di cartella aggiuntivo ad essa e impostiamo quel percorso come Online utilizzando New-DfsnFolderTarget. Gli script di PowerShell DFS ti permettono di aggiungere un numero qualsiasi di componenti.

$Domain = 'tech.io'

## Splat delle impostazioni per una facile leggibilità
$NewTPS = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer01\FileShare\PowerShell'
    State = 'Online'
}

## Aggiungi una nuova cartella situata sul server 'FileServer01' e imposta Online
New-DfsnFolderTarget @NewTPS

Fino a questo punto, abbiamo aggiunto due dei nostri tre percorsi del server, ed è online. Per il nostro ultimo percorso della cartella, vogliamo aggiungere il percorso ma non renderlo disponibile agli utenti. Quindi aggiungiamo un percorso target di cartella alla nostra cartella DFS di PowerShell DFS folder e questa volta impostiamo lo stato del percorso DFS della cartella come offline utilizzeremo di nuovo New-DfsnFolderTarget.

$Domain = 'tech.io'
## Splat delle impostazioni per una facile leggibilità
$NewTPS = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer02\FileShare\PowerShell'
    State = 'Offline'
}

## Aggiungi una nuova cartella situata sul server 'FileServer02' e impostala come Offline
New-DfsnFolderTarget @NewTPS
## Verifica che la cartella esista ora:
Creating a new DFS folder target

Puoi vedere che il percorso di FileServer01 e Datacenter è attualmente Online e lo stato del percorso di FileServer02 è stato impostato su Offline.

DFS path status

Impostazione dei percorsi delle cartelle DFS su Offline o Online.

Possiamo anche cambiare quali server sono gli host Online e Offline, e persino quale sarà il nostro server che sarà l’host principale del percorso del file utilizzando Set-DfsnFolderTarget.

$Domain = 'tech.io'

## Impostazione dei parametri dove il percorso punta al server chiamato FileServer01
$ChangeTPsFS1 = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer01\FileShare\PowerShell'
    State = 'Offline'
}

## Impostazione della cartella situata sul percorso del server 'FileServer01' come Offline
Set-DfsnFolderTarget @ChangeTPsFS1

## Impostazione dei parametri dove il percorso punta al server chiamato FileServer02
$ChangeTPsFS2 = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer02\FileShare\PowerShell'
    State = 'Online'
    ReferralPriorityClass = 'globalhigh'
}

## Impostazione della cartella situata sul server 'FileServer02' come Online
Set-DfsnFolderTarget @ChangeTPsFS2

## Impostazione dei parametri dove il percorso punta al server chiamato Datacenter
$ChangeTPsFS3 = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\datacenter\FileShare\PowerShell'
    ReferralPriorityClass = 'sitecostnormal'
}

## Modifica della priorità del percorso della cartella del server 'Datacenter' a 'Normale'
Set-DfsnFolderTarget @ChangeTPsFS3

Come puoi vedere qui sotto:

  • Il percorso di FileServer01 è stato modificato in Offline
  • La classe di priorità di riferimento del server Datacenter è stata cambiata in sitecost-normal da global-high
  • Lo stato del percorso di FileServer02 è stato modificato in Online
  • La classe di priorità di riferimento di FileServer02 è stata cambiata in global-high
New status of DFS

Rimozione dei percorsi di destinazione delle cartelle DFS con PowerShell

I try to vaccinate my code against the fat finger flu as much as possible. Here we will try to install a safety net before removing one of the folders by making sure that it is offline before deleting it.

# Controlla il percorso di destinazione del server 'FileServer01' e rimuovi il percorso della cartella di destinazione
if ((Get-DfsnFolderTarget -Path "\\$Domain\AppRoot\PowerShell" -TargetPath '\\FileServer01\FileShare\PowerShell').State -eq "Offline") {
    Remove-DfsnFolderTarget -Path "\\$Domain\AppRoot\PowerShell" -TargetPath '\\FileServer01\FileShare\PowerShell' -Force:$true
}

Addio cartella FileServer01!

FileServer01 folder is removed

Per coloro che preferiscono rinunciare all’opzione della rete di sicurezza, possiamo accontentarvi, anime coraggiose, anche.

$Domain = 'tech.io'

## Spazzare via le impostazioni in cui il percorso puntava al server chiamato 'FileServer02'
$DelFTS = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer02\FileShare\PowerShell'
}

##Elimina il DFS FolderTarget
Remove-DfsnFolderTarget @DelFTS -Force:$true

Abbiamo detto addio alla cartella FileServer02.

FileServer02 fodder is removed

Rimozione delle cartelle DFS

È stato un lungo e tortuoso percorso, ma è giunto il momento per il nostro collegamento DFS di terminare. Possiamo rimuovere la cartella PowerShell e il collegamento DFS utilizzando il cmdlet Remove-DfsnFolder.

$Domain = 'tech.io'

## Elimina la cartella DFS
Remove-DfsnFolder -Path "\$Domain\AppRoot\PowerShell" -Force:$true
Removing DFS folder

A quick double-check of the DFS Management GUI shows our DFS link is no more.

Confirming DFS folder removal

Riepilogo

Ecco fatto! Hai percorso una strada tortuosa di DFS e kung fu di PowerShell. Spero che ora tu abbia acquisito alcuni frammenti di codice per aiutarti a creare script PowerShell DFS migliori!

Source:
https://adamtheautomator.com/dfs-powershell-scripts/