NetWorker: Cómo usar el comando nsrpolicy
Resumen: En este artículo, se proporciona información sobre el uso del comando nsrpolicy de NetWorker para realizar tareas de administración de NetWorker.
Instrucciones
La variable nsrpolicy es un comando administrativo de NetWorker que se utiliza para administrar y monitorear las políticas de NetWorker. Muchas de las mismas funciones se realizan desde NetWorker Management (NMC) y la interfaz de usuario web (NWUI); Sin embargo, nsrpolicy Proporciona funcionalidades de línea de comandos a los administradores.
nsrpolicy Se debe ejecutar en una de las siguientes condiciones:
- Está ejecutando el comando desde un símbolo del sistema elevado. Comando de administrador/símbolo del sistema de PowerShell en Windows o root/
sudoshell en Linux. - Está ejecutando el comando desde un símbolo del sistema no elevado, pero emitió un token de autenticación de NetWorker:
nsrlogin -u USERNAME
nsrlogin emite un token de autenticación basado en tiempo para la administración de NetWorker, utilizando las credenciales de usuario de NetWorker. Si está utilizando nsrlogin, es importante cerrar la sesión con nsrlogout cuando las actividades hayan concluido. Esto evita que los tokens obsoletos interfieran con los comandos posteriores.
Descripción general del uso:
nsrpolicy
policy
create | delete | display | update | list
workflow
create | delete | display | update | list
action
create | delete | display | update | list
group
create | delete | display | update
start
Must have: -p [policy] -w [workflow]
Other options (NetWorker 9.2 and above for -c option): -c { <client_name1:[save_set_path_1;save_set_path_2],client_name2...> -s [NetWorker server] -D [debug level] -h
stop
Must have: Either -j [jobid] or -p [policy] -w [workflow]
Other options: -s [NetWorker server] -D [debug level] -h
monitor
Must have: -p [policy]
Other options: -w [workflow] -c [client] -g [group] -d [details] -n [non-tabular] -j [jobid] -s [NetWorker server] -D [debug level] -h
input-file
Must have: -f [file name]
Other options: [--stop_on_error -S <0/1; default:0 (Do not stop)>] [--stop_on_error -S <0/1; default:0 (Do not stop)>] -D [debug level] -h
restart
Must have: Either -j [jobid] or -p [policy] -w [workflow]
Other options: -s [NetWorker server] -D [debug level] -h
migrate
Must have what is to be migrated: group | schedule_clone | nas_device | vmware_policy
Other options: -s [NetWorker server] -D [debug level] -h
help
Ejemplos:
Enumere objetos en la zona de datos:
nsrpolicy [object] list
Objetos: política, flujo de trabajo, acción
nsrpolicy policy list nsrpolicy workflow list -p "VMware Protection" nsrpolicy action list -p "VMware Protection" -w "Full VM"
Muestra las propiedades de una acción:nsrpolicy action display -p [policy] -w [workflow] -A [action]
nsrpolicy action display -p "VMware Protection" -w "Full VM" -A backup
Muestre las propiedades de un grupo:nsrpolicy group display -g [group]
nsrpolicy group display -g "VMware Protection - Full VM"
Deshabilite o habilite una acción:nsrpolicy action update [action type backup subtype] -p [policy] -w [workflow] -A [action] -e [no/yes]
nsrpolicy action update backup traditional -p "Client Protection" -w "Traditional Client" -A backup -e no nsrpolicy action update backup traditional -p "Client Protection" -w "Traditional Client" -A backup -e yes
Para cambiar el programa asociado con una acción:nsrpolicy action update [action type backup subtype] -p [policy] -w [workflow] -A [action] -t [schedule]
nsrpolicy action update backup traditional -p "Client Protection" -w "Traditional Client" -A backup -t full,incr,incr,incr,incr,incr,incr
Agregue un cliente a un grupo mediante un archivo de entrada (ya debe existir una instancia de cliente):
cree un archivo de entrada con el texto:group update client -g [group] --add_clnt_list [client]:[saveset]
[root@nsr ~]# cat AddTraditionalClient.txt group update client -g "Client Protection - Traditional Client" --add_clnt_list win-client03.amer.lan:All
nsrpolicy input-file -f "[path to input file]"
[root@nsr ~]# nsrpolicy input-file -f /root/AddTraditionalClient.txt 121415:nsrpolicy: Command from file: group update client -g "Client Protection - Traditional Client" --add_clnt_list win-client03.amer.lan:All 133584:nsrpolicy: Group 'Client Protection - Traditional Client' was successfully updated
Cree un nuevo flujo de trabajo con valores no predeterminados para comment, start-time y group:nsrpolicy workflow create -p [policy] -w [workflow] -c [comment] -g [group] -S [start time]
nsrpolicy workflow create -p "Client Protection" -w "Traditional Client - Linux" -c "Linux Clients" -g "Linux - Clients" -S "10:00"
Cree una nueva acción con valores no predeterminados para el pool objetivo y el umbral de éxito:nsrpolicy action create [action type backup subtype] -p [policy] -w [workflow] -A [action] -o [target pool] -u [success threshold]
nsrpolicy action create backup traditional -p "Client Protection" -w "Traditional Client - Linux" -A backup -o "Data Domain Default" -u success
Iniciar un flujo de trabajo (no puede iniciar una acción de esta manera. Debe iniciar todo el flujo de trabajo).nsrpolicy start -p [policy] -w [workflow]
nsrpolicy start -p "Client Protection" -w "Traditional Client - Linux"
Detener un flujo de trabajo:nsrpolicy stop -p [policy] -w [workflow]
nsrpolicy stop -p "Client Protection" -w "Traditional Client - Linux"
jobkill:
[root@nsr ~]# nsrpolicy start -p "Client Protection" -w "Traditional Client - Linux" 144091:nsrpolicy: Workflow 'Client Protection/Traditional Client - Linux' started and has job id 1248743 [root@nsr ~]# [root@nsr ~]# jobkill -j 1248743 Terminating job 1248743
Inicie un cliente en un flujo de trabajo:nsrpolicy start -p [policy] -w [workflow] -c "[client]:[saveset]
nsrpolicy start -p "Client Protection" -w "Traditional Client - Linux" -c "rhel-client03.amer.lan:All"
Monitoree la ejecución más reciente de los flujos de trabajo en una política:nsrpolicy monitor -p [policy] -dn
nsrpolicy monitor -p "Client Protection" -dn
nsrwatch comando para monitorear las sesiones.
Salida de trabajo detallada para un trabajo reciente específico:nsrpolicy monitor -j [job id]
nsrpolicy monitor -j 290473
jobquery:
jobquery
print type: backup action job
Para iniciar un flujo de trabajo en modo de depuración, nsrpolicy no es tan eficaz como el nsrworkflow comando porque 'nsrpolicy start' no registra la salida de depuración en el archivo /nsr/logs/policy carpeta que nsrworkflow voluntad a la .raw de NetWorker.nsrworkflow -D[Debug Level] -p [policy] -w [workflow] -A "[action]"
nsrworkflow -D9 -p "Client Protection" -w "Traditional Client - Linux"
Para obtener más información sobre los niveles de depuración de NetWorker, consulte: NetWorker: Niveles de información de depuración
nsrworkflow debug solo depura los mensajes del lado del servidor de NetWorker. No agrega depuración a las operaciones realizadas en el cliente/sistema que realiza el respaldo.
Ejemplo de habilitación save -D3 respaldos en un cliente de NetWorker, mediante la utilidad de línea de comandos nsradmin:
[root@nsr ~]# nsradmin NetWorker administration program. Use the "help" command for help, "visual" for full-screen mode. nsradmin> . type : NSR Client; name : rhel-client03.amer.lan Current query set nsradmin> update backup command : save -D3 backup command: save -D3; Update? y updated resource id 48.0.46.11.0.0.0.0.231.177.13.90.10.60.28.121(13)
En el ejemplo anterior, cuando se inicia el flujo de trabajo para el cliente, el save El proceso se inicia en el cliente con la depuración habilitada (-D3) en este caso.
Para depurar funciones de respaldo específicas, consulte: NetWorker: Cómo depurar operaciones de respaldo
Registro:
Todos los respaldos de políticas y flujos de trabajo se registran en el directorio de registros de NetWorker:
Linux: /nsr/logs/policy/POLICY_NAME
Windows (valor predeterminado): C:\Program Files\EMC NetWorker\nsr\logs\policy\POLICY_NAME
Los mensajes generales del servidor se registran en el daemon.raw:
Linux: /nsr/logs/daemon.raw
Windows (valor predeterminado): C:\Program Files\EMC NetWorker\nsr\logs\daemon.raw
NetWorker: Cómo usar nsr_render_log para representar .raw archivos de registro
jobsdb período de retención (72 horas predeterminado). Los registros pasados por el período de retención se eliminan del sistema durante las tareas de vencimiento.
Ejemplos de scripts:
nsrpolicy capacidades más allá del uso de una sola línea y cómo se puede administrar el servidor de NetWorker desde la CLI. No implemente/use scripts en su entorno sin probar o comprender las funciones. El soporte de NetWorker no ofrece ni proporciona ninguna solución de scripts ni soporte de scripts.
Linux:
Ejemplo 1: Enumere todas las políticas y sus flujos de trabajo. Este script de shell ejecuta un bucle a través de la lista de políticas en la configuración de NetWorker y ejecuta el comando "nsrpolicy workflow list" frente a cada uno, de modo que genere una lista de nombres de flujo de trabajo para cada política.
#!/usr/bin/sh
IFS=$'\n'
fullpolicylist=(`nsrpolicy policy list`)
for lp in "${fullpolicylist[@]}"
do
echo " "
echo "POLICY: $lp"
echo "Workflows"
nsrpolicy workflow list -p "$lp"
done
Ejemplo 2: Enumere todas las políticas, sus flujos de trabajo y acciones, y el pool de destino. Este script de shell ejecuta tres ciclos para obtener la lista de políticas, flujos de trabajo y acciones. Se generan los nombres de cada uno y el parámetro del nodo de almacenamiento de destino de la acción.
#!/usr/bin/env bash
set -euo pipefail
# Read policies into an array (one per line)
mapfile -t fullpolicylist < <(nsrpolicy policy list)
for lp in "${fullpolicylist[@]}"; do
echo "------------------"
echo "POLICY: $lp"
# Read workflows for this policy
mapfile -t wflist < <(nsrpolicy workflow list -p "$lp")
for w in "${wflist[@]}"; do
echo
echo "WORKFLOW: $w"
# Read actions for this workflow
mapfile -t alist < <(nsrpolicy action list -p "$lp" -w "$w")
for a in "${alist[@]}"; do
echo "ACTION: $a"
# Pull DestinationPool value
destpool=$(
nsrpolicy action display -p "$lp" -w "$w" -A "$a" \
| awk -F': ' '/DestinationPool/ {print $2; exit}'
)
echo "Destination Pool: ${destpool:-<none>}"
done
done
done
Windows PowerShell:
Ejemplo 1: Lista de flujos de trabajo. Enumera las políticas y sus flujos de trabajo recorriendo en bucle la lista de políticas y ejecutando el comando "nsrpolicy workflow list" para cada política.
$listp = nsrpolicy policy list
foreach ($i in $listp)
{
write-host "-----"
write-host "POLICY: $i"
write-host "WORKFLOWS: "
nsrpolicy workflow list -p "$i"
}
Ejemplo 2: Lista de acciones. Se crean tres bucles. Un loop para enumerar las políticas y, a continuación, un bucle para enumerar todos los flujos de trabajo para cada política y, a continuación, un bucle para enumerar todas las acciones para cada flujo de trabajo.
$listp = nsrpolicy policy list
foreach ($p in $listp)
{
write-host "-----"
write-host "POLICY: $p"
write-host "WORKFLOWS: "
$wlist = nsrpolicy workflow list -p $p
foreach ($w in $wlist)
{
write-host "$w"
write-host "ACTIONS:"
$alist = nsrpolicy action list -p "$p" -w "$w"
foreach ($a in $alist)
{
write-host "$a"
}
}
}Información adicional
El primer paso es iniciar sesión en NetWorker Server en la línea de comandos mediante el comando nsrlogin con las mismas credenciales que utiliza para iniciar sesión en NetWorker Management Console. Cuando ejecuta el comando nsrlogin, el host de NetWorker se comunica con NetWorker AuthenticationService para validar las credenciales de inicio de sesión del usuario.
nsrlogin -u [nombre de usuario]: p [contraseña]
El comando nsrpolicy tiene una serie de opciones diferentes disponibles en cada nivel. Si presiona la tecla Intro en cada paso, obtendrá la lista completa de opciones disponibles para la siguiente parte de su comando:
nsrpolicy
policy create
| delete | display | update | list
workflow
create | delete | display | update | list
action
create | delete | display | update | list
group
create | delete | display | inicio de actualización
Debe tener: -p [política] -w [flujo de trabajo]
Otras opciones (NetWorker 9.2 y superior para la opción -c): -c { <client_name1:[save_set_path_1; save_set_path_2],client_name2...> -s [servidor NetWorker] -D [nivel de depuración] -h
parar
Debe tener: O bien -j [jobid] o -p [política] -w [flujo de trabajo]
Otras opciones: -s [servidor NetWorker] -D [nivel de depuración] -h
monitor
Debe tener: -p [política]
Otras opciones: -w [flujo de trabajo] -c [cliente] -g [grupo] -d [detalles] -n [no tabular] -j [jobid] -s [servidor NetWorker] -D [nivel de depuración] -h
archivo
de entradaDebe tener: -f [nombre de archivo]
Otras opciones: [--stop_on_error -S 0/1; default:0 (No parar)>] [--stop_on_error -S <0/1; default:0 (No parar)>] -D [nivel de <depuración] -h
restart
Debe tener: O bien -j [jobid] o -p [política] -w [flujo de trabajo]
Otras opciones: -s [servidor NetWorker] -D [nivel de depuración] -h
migrar
Debe tener lo que se va a migrar: grupo | schedule_clone | nas_device | vmware_policy
Otras opciones: -s [servidor NetWorker] -D [nivel de depuración] -h
Ayuda
EJEMPLOS DE LÍNEA DE COMANDOS:
Mostrar políticas en la zona
de datosnsrpolicy policy list
nsrpolicy policy policy list
Muestra las propiedades de una acción:
nsrpolicy action display -p [política] -w [flujo de trabajo] -A [acción]
nsrpolicy action display -p Mona -w Mona_wf -A backup
Muestre las propiedades de un grupo:
nsrpolicy group display -g [grupo]
nsrpolicy group display -g Felix
Deshabilitar una acción:
nsrpolicy action update [tipo de acción backup subtype] -p [política] -w [flujo de trabajo] -A [acción] -e no
nsrpolicy action update backup traditional -p FrankHoenikker -w FrankH -A backup -e no
Para cambiar el programa asociado con una acción:
nsrpolicy action update [tipo de acción backup subtype] -p [política] -w [flujo de trabajo] -A [acción] -t [programación]
nsrpolicy action update backup traditional -p Mona -w Mona_wf -A backup -t full,incr,incr,incr,incr,incr,incr
Agregue un cliente a un grupo mediante un archivo de entrada (la instancia del cliente ya debe existir):
Cree un archivo de entrada con el texto: group update client -g [group] --add_clnt_list [client]:[saveset]
cat AddAlicetoTheHook.input
group update client -g TheHook --add_clnt_list vm-lego-231:/alice
nsrpolicy input-file -f "[ruta al archivo de entrada]"
nsrpolicy input-file -f "/nsr/AddAlicetoTheHook.input"
Cree un nuevo flujo de trabajo con valores no predeterminados para comment, start-time y group:
nsrpolicy workflow create -p [política] -w [flujo de trabajo] -c [comentario] -g [grupo] -S [hora de inicio]
nsrpolicy workflow create -p Mona -w Papa -c "Flujo de trabajo para clientes de RedHat 6" -g PapaMgroup -S "10:00"
Cree una nueva acción con valores no predeterminados para el pool de destino y el umbral
de éxito nsrpolicy action create [action type backup subtype] -p [policy] -w [workflow] -A [action] -o [target pool] -u [success threshold]
nsrpolicy action create backup traditional -p Mona -w Papa -A papabackup -o SanLorenzoDDPool -u success
Start a workflow (Tenga en cuenta que no puede iniciar una acción de esta manera. Debe iniciar todo el flujo de trabajo).
nsrpolicy start -p [política] -w [flujo de trabajo]
nsrpolicy start -p Mona -w Mona_wf
Detenga un flujo de trabajo (puede obtener el ID de trabajo pertinente mediante el comando "nsrpolicy monitor"; consulte a continuación):
nsrpolicy stop -j [jobid]
nsrpolicy stop -j 320819
Inicie un cliente en un flujo de trabajo:
nsrpolicy start -p [política] -w [flujo de trabajo] -c "[cliente]:[saveset]
nsrpolicy start -p Mona -w Mona_wf -c "vm-wego-231:/felix"
Monitoree la ejecución más reciente de los flujos de trabajo en una política:
nsrpolicy monitor -p [política] -dn
nsrpolicy monitor -p Mona -dn
Salida de trabajo detallada para un trabajo reciente específico:
nsrpolicy monitor -j [ID de trabajo]
nsrpolicy monitor -j 290473
Para iniciar un flujo de trabajo en modo de depuración, nsrpolicy no es tan eficaz como el comando nsrworkflow porque "nsrpolicy start" no registrará el resultado de depuración en la carpeta /nsr/logs/policy que nsrworkflow registrará en el archivo sin formato.
nsrworkflow -p [política] -w [flujo de trabajo] -A "[acción]"
nsrworkflow -D9 -p Newt -w newt1 -A "backup"
El lugar donde le gustaría poner la depuración depende de la parte precisa del proceso de copia de seguridad que necesita ver con más detalle. El comando nsrworkflow anterior colocará las operaciones de savegrp del lado del servidor de NetWorker en D9 y generará los datos de depuración en el archivo sin formato en /nsr/logs/policy. Sin embargo, no pasará la marca de depuración al proceso de guardado del lado del cliente de NetWorker. Para hacer esto, debe modificar el campo "comando de respaldo" para el cliente. Puede usar NMC para esto, o desde la línea de comandos:
Esto hará que el proceso de guardado se ejecute en modo de depuración (D3 en el siguiente ejemplo) y generará los datos del registro de depuración en la carpeta /nsr/logs/policy/[nombre de política]/[nombre del flujo de trabajo]/ _logs.
NWserver121:> programa de administración de NetWorker nsradmin
.
Utilice el comando "help" para obtener ayuda, "visual" para el modo de pantalla completa.
nsradmin> . escriba: Cliente NSR; nombre : vm-lego-231
Conjunto
de consultas actual nsradmin> update comando de respaldo: save -D3
comando de respaldo: save -D3;
¿Actualizar? y
Se actualizó el ID de recurso 48.0.46.11.0.0.0.0.231.177.13.90.10.60.28.121(13)
comando de respaldo: save -D3;
¿Actualizar? y
Se actualizó el ID de recurso 45.0.185.125.0.0.0.0.126.197.192.89.10.60.28.121(34)
comando de respaldo: save -D3;
¿Actualizar? y
Se actualizó el ID de recurso 47.0.28.24.0.0.0.0.123.60.218.88.10.60.28.121(39)
comando de respaldo: save -D3;
¿Actualizar? y
Se actualizó el ID de recurso 64.0.28.24.0.0.0.0.123.60.218.88.10.60.28.121(35)
comando de respaldo: save -D3;
¿Actualizar? y
Se actualizó el ID de recurso 57.0.46.11.0.0.0.0.231.177.13.90.10.60.28.121(8)
comando de respaldo: save -D3;
¿Actualizar? y
Se actualizó el ID de recurso 49.0.62.11.0.0.0.0.118.31.239.89.10.60.28.121(5)
/nsr/logs/policy/Zinka/zinka_wf/zinka_backup_357042_logs
EJEMPLOS DE SCRIPTS:
Estos scripts se dan como ejemplos de lo que se puede crear con este comando. No deben implementarse en un entorno de producción sin pruebas exhaustivas.
LINUX:
Ejemplo 1: Enumerar todas las políticas y sus flujos de
trabajoEste script de shell ejecuta un bucle a través de la lista de políticas en la configuración de NetWorker y ejecuta el comando "nsrpolicy workflow list" en cada una de ellas, de modo que se genere una lista de nombres de flujo de trabajo para cada política.
cat listofworkflows.sh
#!/usr/bin/sh
IFS=$'\n'fullpolicylist
=('nsrpolicy policy list')
for lp in "${fullpolicylist[@]}"
do
echo " "
echo "POLICY: $lp"
echo "Flujos de trabajo"
nsrpolicy workflow list -p "$lp"
done
Ejemplo 2: Enumere todas las políticas y sus flujos de trabajo y acciones, y el pool
de destinoEste script de shell ejecuta tres ciclos para obtener la lista de políticas, flujos de trabajo y acciones. Se generan los nombres de cada uno, así como el parámetro del nodo de almacenamiento de destino de la acción.
cat listofworkflows_actions.sh
#!/usr/bin/sh
IFS=$'\n'fullpolicylist
=('nsrpolicy policy list')
for lp in "${fullpolicylist[@]}"
do
echo "------------------ "
echo "POLICY: $lp"
wflist=('nsrpolicy workflow list -p $lp')
for w in "${wflist[@]}"
do
echo " "
echo "FLUJO DE TRABAJO: $w"
alist=('nsrpolicy action list -p $lp -w $w')
for a in "${alist[@]}"
do
echo "ACTION: $a"
destpool='nsrpolicy action display -p $lp -w $w -A $a | grep DestinationPool | cut -d ":" -f2'
echo "Pool de destino: $destpool"
listo
, listo
, listoEjemplo
3: ejecutar un respaldo solo si existe
un directorio específico Este script de shell comprueba si existe un directorio llamado /k7app. Si lo hace, inicia el flujo de trabajo llamado newt1 y registra que lo hizo en un archivo de registro dedicado. Si el directorio no existe, no se ejecuta el respaldo; este hecho, se registra en el mismo archivo de registro. La misma estructura de script se puede utilizar para cualquier circunstancia en la que desee que un flujo de trabajo se ejecute solo cuando se cumpla una condición específica.
#!/usr/bin/sh
IFS=$'\n'dir
="/k7app"
log="/nsr/logs/k7applog.log"
DATE='date'if
[ -d "$dir" ]
then
nsrpolicy start -p Newt -w newt1
printf $DATE >> $log
printf " $dir está presente, por lo tanto, se inicia el flujo de trabajo newt1 \n">>$log
else
printf $DATE >> $log
printf " $dir no está presente, por lo tanto, no se inicia el flujo de trabajo newt1 \n">>$log fi
WINDOWS POWERSHELL:
Ejemplo 1: Lista de flujos de trabajo
Enumera las políticas y sus flujos de trabajo recorriendo en bucle la lista de políticas y ejecutando el comando "nsrpolicy workflow list" para cada política.
$listp = nsrpolicy policy list
foreach ($i in $listp)
{
write-host "-----"
write-host "POLICY: $i"
write-host" FLUJOS DE TRABAJO: "
nsrpolicy workflow list -p "$i"
}
Ejemplo 2: Lista de acciones
Se crean tres bucles. Un loop para enumerar las políticas y, a continuación, un bucle para enumerar todos los flujos de trabajo para cada política y, a continuación, un bucle para enumerar todas las acciones para cada flujo de trabajo.
$listp = nsrpolicy policy list
foreach ($p in $listp)
{
write-host "-----"
write-host "POLICY: $p"
write-host" FLUJOS DE TRABAJO: "
$wlist = nsrpolicy workflow list -p $p
foreach ($w in $wlist)
{
write-host "$w"
write-host "ACTIONS:"
$alist = nsrpolicy action list -p "$p" -w "$w"
foreach ($a in $alist)
{
write-host "$a"
}
}
}
Ejemplo 3 Ejecutar un respaldo solo si existe
un directorio específico Este script comprueba si existe un directorio llamado C:\basicdata. Si lo hace, inicia el flujo de trabajo denominado Star y registra que lo hizo en un archivo de registro dedicado. Si el directorio no existe, no se ejecuta el respaldo; este hecho, se registra en el mismo archivo de registro. La misma estructura de script se puede utilizar para cualquier circunstancia en la que desee que un flujo de trabajo se ejecute solo cuando se cumpla una condición específica.
$dir = "C:\basicdata"
$log = "C:\Program Files\EMC NetWorker\nsr\logs\star.log"
$LogTime = Get-Date -Format "MM-dd-yyyy_hh-mm-ss"
if ( Test-Path "$dir" )
{ nsrpolicy start -p Star -w Workflow1
"------------------" | Out-File $log -Append -Force
$LogTime | Fuera de archivo $log -Anexar -Forzar
"Estrella iniciada" | out-file $log -append -force
}
else
{
"------------------" | Out-File $log -Append -Force
$LogTime | Out-File $log -Append -Force
"Star not started because $dir doesn t exist" | Out-File $log -Append -Force
}