Administración eficiente de DFS con scripts de PowerShell

Prepárate para aprender cómo escribir mejores scripts de PowerShell DFS utilizando los conocimientos que obtengas en este tutorial. En esta publicación, ¡aprenderás todo sobre cómo gestionar enlaces DFS en PowerShell!

Esta publicación de blog tiene un video complementario creado por Scott Hurst, colaborador de TechSnips. ¡Siéntete libre de verlo o, si prefieres texto, sigue leyendo!

Mis Últimos Videos

Los enlaces del Sistema de Archivos Distribuidos (DFS) reducen la complejidad de trabajar con comparticiones de archivos en red. Los enlaces DFS permiten a los usuarios y aplicaciones acceder a un nombre de ruta virtual para conectar con carpetas compartidas. Puedes crear enlaces DFS con PowerShell.

Ya sea que estés gestionando Active Directory u otro producto DFS, escribir scripts de PowerShell DFS te ayudará a lidiar con cualquier problema que encuentres.

Este espacio de nombres virtual permite a los administradores presentar carpetas compartidas ubicadas en diferentes servidores, o incluso cambiar la ubicación de una carpeta compartida, completamente transparente para los consumidores de esa carpeta.

Los usuarios no necesitarán actualizar marcadores, y las aplicaciones no necesitarán ser actualizadas con nuevas rutas cuando cambien los servidores de archivos.

Beneficios del DFS

Para los usuarios, el acceso a carpetas compartidas de red se simplifica a un formato <nombre de espacio de nombres>\NombreDeCarpeta, una reducción en la complejidad asociada con carpetas almacenadas en servidores remotos.

Para las aplicaciones, los caminos codificados en duro a los recursos en la red no necesitan ser cambiados debido a un cambio en el camino de la red. Una actualización simple al enlace DFS y la aplicación seguirá accediendo a los recursos en su nueva ubicación.

Prerrequisitos para el Rol del Servidor DFS

  • Active Directory
  • Rol de Servicios de Archivos y Almacenamiento instalado en un servidor Windows
  • Windows Server (Canal Semi-Anual)
  • Windows Server 2016
  • Windows Server 2012 R2
  • Windows Server 2012
  • Windows Server 2008 R2 Datacenter/Enterprise

Prerrequisitos

  • Una cuenta de administrador con los permisos adecuados
  • Herramientas RSAT con las herramientas de ‘Servicios de Archivos – Herramientas de Administración DFS’ instaladas

Preparación para tus Scripts de PowerShell de DSC

Primero, descargar e instalar RSAT. Luego, necesitas instalar todas las características necesarias de Windows. Esto instalará la GUI de Administración DFS, el módulo de espacios de nombres DFS para PowerShell de Windows para crear enlaces DFS con PowerShell y gestionarlos, y herramientas de línea de comandos, pero no instalará ningún servicio DFS en el servidor.

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

Comandos Comunes de DFS

Puedes administrar los espacios de nombres usando la GUI de Administración DFS, los cmdlets de Espacio de Nombres DFS (DFSN) en PowerShell, los comandos de DfsUtil, o scripts que llaman a WMI.

Algunos comandos comunes de PowerShell son:

  • Get-DfsnRoot – Descubre todos los espacios de nombres de DFS en el dominio actual – Comúnmente utilizado para verificar los espacios de nombres disponibles en el dominio actual
  • New-DfsnFolder – Crea un nuevo nombre de carpeta DFS
    – Comúnmente utilizado para crear una nueva carpeta DFS en un espacio de nombres
  • New-DfsnFolderTarget – Asigna ruta(s) a un nombre de carpeta DFS
    – Comúnmente utilizado para asignar una o más rutas de carpetas de red a una carpeta DFS
  • Remove-DfsnFolderTarget – Elimina una ruta de una carpeta DFS pero no elimina la carpeta DFS.
    – Comúnmente utilizado para eliminar una o más rutas de carpetas de red de una carpeta DFS
  • Remove-DfsnFolder – Elimina una carpeta y todas sus rutas
    – Comúnmente utilizado para eliminar una carpeta DFS de un espacio de nombres

Encontrar espacios de nombres de DFS

Comenzaremos obteniendo una idea de todos los espacios de nombres en línea y disponibles en el dominio actual utilizando el cmdlet Get-DfsnRoot.

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

Esto muestra que hay dos espacios de nombres en línea en este dominio.

Finding DFS roots

Encontrar carpetas DFS

Usando el comando Get-DfsnFolder, podemos listar las carpetas DFS en cada espacio de nombres.

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

A partir de esta salida, podemos ver que en el espacio de nombres AppRoot no existe una carpeta DFS llamada PowerShell.

Finding DFS folders

En este ejemplo, tenemos una carpeta replicada llamada PowerShell en nuestros tres servidores de archivos; FileServer01, FileServer02 y Datacenter.

El objetivo es compartir esta carpeta replicada con nuestros administradores utilizando una única ruta.

Para hacer esto, crearemos una nueva carpeta DFS enlace en el AppRoot namespace llamada PowerShell utilizando New-DfsnFolder y apuntándola a la carpeta compartida de archivos del servidor del centro de datos. Configuraremos el estado de la carpeta DFS carpeta a En línea y estableceremos el estado de TargetPath a En línea.

$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

# Verificar que la carpeta ahora existe:
Get-DfsnFolderTarget -Path "\\$Domain\AppRoot\PowerShell"

# Verificar que el nuevo enlace DFS funciona usando el Explorador de Windows
Invoke-Expression "explorer '\\$Domain\AppRoot\PowerShell\'"

En la interfaz gráfica de administración de DFS, podemos ver que la carpeta DFS PowerShell no existe.

Inspecting DFS folders in the GUI
The folder target UNC path

Ahora ejecutemos el Explorador de Windows desde una consola de PowerShell y confirmemos que no existe.

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

Si la carpeta no existe, mostrará la salida Ruta no encontrada. Listo para continuar en texto verde en la ventana de la terminal, como se puede ver a continuación.

A partir de la salida, vemos que la carpeta ha sido creada, la Referral Priority Class se establece en Global-High y el State está en En línea.

Inspecting DFS referral priority class and state

La interfaz gráfica también confirma lo que PowerShell nos dijo.

Inspecting DFS referral priority class and state

y nuestra ruta ahora está disponible en el Explorador de Windows.

DFS path available in Windows Explorer

Creación de Destinos de Carpeta DFS

Ahora que hemos creado con éxito la carpeta DFS en el espacio de nombres con Powershell, añade una ruta de destino de carpeta adicional y configura esa ruta como En línea usando New-DfsnFolderTarget. Los scripts de PowerShell de DFS te permiten añadir cualquier cantidad de componentes.

$Domain = 'tech.io'

## Desglosa las configuraciones para facilitar la legibilidad
$NewTPS = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer01\FileShare\PowerShell'
    State = 'Online'
}

## Añade una nueva carpeta ubicada en el servidor 'FileServer01' y establece en línea
New-DfsnFolderTarget @NewTPS

Hasta este punto, tenemos dos de nuestras tres rutas de servidor añadidas y en línea. Para nuestra última ruta de carpeta, queremos añadir la ruta pero no hacerla disponible para los usuarios. Así que agreguemos una ruta de destino de carpeta a nuestra carpeta DFS y esta vez establezcamos el estado de la ruta de la carpeta DFS en fuera de línea, nuevamente usaremos New-DfsnFolderTarget.

$Domain = 'tech.io'
## Desglosa las configuraciones para facilitar la legibilidad
$NewTPS = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer02\FileShare\PowerShell'
    State = 'Offline'
}

## Añade una nueva carpeta ubicada en el servidor 'FileServer02' y establece en fuera de línea
New-DfsnFolderTarget @NewTPS
## Comprueba que la carpeta ahora existe:
Creating a new DFS folder target

Puedes ver que la ruta de FileServer01 y del Datacenter está actualmente En línea y el estado de la ruta de FileServer02 se ha establecido en Fuera de línea.

DFS path status

Configuración de las rutas de carpetas DFS en modo Fuera de línea o En línea

Podemos también cambiar qué servidores son los anfitriones En línea y Desconectado, e incluso cuál será nuestro servidor principal de la ruta del archivo usando Set-DfsnFolderTarget.

$Domain = 'tech.io'

## Configurando las opciones donde la ruta apunta al servidor llamado FileServer01
$ChangeTPsFS1 = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer01\FileShare\PowerShell'
    State = 'Offline'
}

## Establecer carpeta ubicada en la ruta del servidor 'FileServer01' a Desconectado
Set-DfsnFolderTarget @ChangeTPsFS1

## Configurando las opciones donde la ruta apunta al servidor llamado FileServer02
$ChangeTPsFS2 = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer02\FileShare\PowerShell'
    State = 'Online'
    ReferralPriorityClass = 'globalhigh'
}

## Establecer carpeta ubicada en el servidor 'FileServer02' a En línea
Set-DfsnFolderTarget @ChangeTPsFS2

## Configurando las opciones donde la ruta apunta al servidor llamado Datacenter
$ChangeTPsFS3 = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\datacenter\FileShare\PowerShell'
    ReferralPriorityClass = 'sitecostnormal'
}

## Cambiar Prioridad de la carpeta del servidor 'Datacenter' a 'Normal'
Set-DfsnFolderTarget @ChangeTPsFS3

Como se puede ver a continuación:

  • La ruta de FileServer01 ha cambiado a Desconectado
  • El servidor Datacenter ha cambiado a ReferralPriorityClass a sitecost-normal desde global-high
  • La ruta de FileServer02 ha cambiado a En línea
  • El ReferralPriorityClass de FileServer02 ha cambiado a global-high
New status of DFS

Eliminando rutas de destino de carpetas 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.

# Verificar Ruta de Destino al servidor 'FileServer01' a Desconectado y Eliminar la Ruta de Destino de la Carpeta
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
}

¡Hasta pronto carpeta FileServer01!

FileServer01 folder is removed

Para aquellos que prefieren prescindir de la opción de red de seguridad, podemos acomodarlos, valientes almas también.

$Domain = 'tech.io'

## Desglosando la configuración donde la ruta apuntaba al servidor llamado 'FileServer02'
$DelFTS = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer02\FileShare\PowerShell'
}

## Eliminar el DFS FolderTarget
Remove-DfsnFolderTarget @DelFTS -Force:$true

Hemos dicho adiós a la carpeta FileServer02.

FileServer02 fodder is removed

Eliminando Carpetas DFS

Ha sido un camino largo y sinuoso, pero ha llegado el momento de decir adiós a nuestro enlace DFS. Podemos eliminar la carpeta PowerShell y el enlace DFS utilizando el cmdlet Remove-DfsnFolder.

$Domain = 'tech.io'

## Eliminar la Carpeta 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

Resumen

¡Eso es todo! Has recorrido un camino sinuoso de DFS y kung fu de PowerShell. ¡Espero que ahora tengas algunos fragmentos de código para ayudarte a construir mejores scripts de PowerShell DFS!

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