update ise instalar comandos powershell windows-server-2008 powershell-ise

ise - update powershell windows 7



Crear directorio si no existe. (10)

¿Has probado el parámetro -Force ?

New-Item -ItemType Directory -Force -Path C:/Path/That/May/Or/May/Not/Exist

Puede usar Test-Path -PathType Container para verificar primero.

Vea el New-Item ayuda de New-Item MSDN para más detalles.

Estoy escribiendo un script de PowerShell para crear varios directorios si no existen.

El sistema de archivos es similar a este

D:/ D:/TopDirec/SubDirec/Project1/Revision1/Reports/ D:/TopDirec/SubDirec/Project2/Revision1/ D:/TopDirec/SubDirec/Project3/Revision1/

  • Cada carpeta de proyecto tiene múltiples revisiones.
  • Cada carpeta de revisión necesita una carpeta de informes.
  • Algunas de las carpetas de "revisiones" ya contienen una carpeta de Informes; Sin embargo, la mayoría no lo hacen.

Necesito escribir un script que se ejecute diariamente para crear estas carpetas para cada directorio.

Soy capaz de escribir el script para crear una carpeta, pero crear varias carpetas es problemático.


Aquí hay una simple que funcionó para mí. Comprueba si existe la ruta, y si no, creará no solo la ruta raíz, sino también todos los subdirectorios:

$rptpath = "C:/temp/reports/exchange" if (!(test-path -path $rptpath)) {new-item -path $rptpath -itemtype directory}


Cuando especifique el indicador -Force , PowerShell no se quejará si la carpeta ya existe.

Un trazador de líneas:

Get-ChildItem D:/TopDirec/SubDirec/Project* | ` %{ Get-ChildItem $_.FullName -Filter Revision* } | ` %{ New-Item -ItemType Directory -Force -Path (Join-Path $_.FullName "Reports") }

Por cierto, para programar la tarea, consulte este enlace: Programación de trabajos en segundo plano .


Desde su situación suena como que necesita crear una carpeta de "Revisión #" una vez al día con una carpeta de "Informes" allí. Si ese es el caso, solo necesita saber cuál es el siguiente número de revisión. Escriba una función que obtenga el siguiente número de revisión Get-NextRevisionNumber. O podrías hacer algo como esto:

foreach($Project in (Get-ChildItem "D:/TopDirec" -Directory)){ #Select all the Revision folders from the project folder. $Revisions = Get-ChildItem "$($Project.Fullname)/Revision*" -Directory #The next revision number is just going to be one more than the highest number. #You need to cast the string in the first pipeline to an int so Sort-Object works. #If you sort it descending the first number will be the biggest so you select that one. #Once you have the highest revision number you just add one to it. $NextRevision = ($Revisions.Name | Foreach-Object {[int]$_.Replace(''Revision'','''')} | Sort-Object -Descending | Select-Object -First 1)+1 #Now in this we kill 2 birds with one stone. #It will create the "Reports" folder but it also creates "Revision#" folder too. New-Item -Path "$($Project.Fullname)/Revision$NextRevision/Reports" -Type Directory #Move on to the next project folder. #This untested example loop requires PowerShell version 3.0. }

Instalación de PowerShell 3.0


El siguiente fragmento de código le ayuda a crear una ruta completa.

Function GenerateFolder($path){ $global:foldPath=$null foreach($foldername in $path.split("/")){ $global:foldPath+=($foldername+"/") if(!(Test-Path $global:foldPath)){ New-Item -ItemType Directory -Path $global:foldPath # Write-Host "$global:foldPath Folder Created Successfully" } } }

La función anterior divide la ruta que pasó a la función y verificará si cada carpeta ha existido o no. Si no existe, creará la carpeta correspondiente hasta que se cree la carpeta de destino / final.

Para llamar a la función, use la siguiente declaración:

GenerateFolder "H:/Desktop/Nithesh/SrcFolder"


Hay 3 maneras que conozco para crear un directorio usando PowerShell

Method 1: PS C:/> New-Item -ItemType Directory -path "c:/livingston"

Method 2: PS C:/> [system.io.directory]::CreateDirectory("c:/livingston")

Method 3: PS C:/> md "c:/livingston"


Quería poder permitir fácilmente a los usuarios crear un perfil predeterminado para PowerShell para anular algunas configuraciones, y terminé con la siguiente frase (varias afirmaciones, sí, pero se pueden pegar en PowerShell y ejecutar de una vez, que era el objetivo principal ):

cls; [string]$filePath = $profile; [string]$fileContents = ''<our standard settings>''; if(!(Test-Path $filePath)){md -Force ([System.IO.Path]::GetDirectoryName($filePath)) | Out-Null; $fileContents | sc $filePath; Write-Host ''File created!''; } else { Write-Warning ''File already exists!'' };

Para facilitar la lectura, así es como lo haría en un archivo ps1:

cls; # Clear console to better notice the results [string]$filePath = $profile; # declared as string, to allow the use of texts without plings and still not fail. [string]$fileContents = ''<our standard settings>''; # Statements can now be written on individual lines, instead of semicolon separated. if(!(Test-Path $filePath)) { New-Item -Force ([System.IO.Path]::GetDirectoryName($filePath)) | Out-Null; # Ignore output of creating directory $fileContents | Set-Content $filePath; # Creates a new file with the input Write-Host ''File created!''; } else { Write-Warning "File already exists! To remove the file, run the command: Remove-Item $filePath"; };


Tuve exactamente el mismo problema. Puedes usar algo como esto:

$local = Get-Location; $final_local = "C:/Processing"; if(!$local.Equals("C:/")) { cd "C:/"; if((Test-Path $final_local) -eq 0) { mkdir $final_local; cd $final_local; liga; } ## If path already exists ## DB Connect elseif ((Test-Path $final_local) -eq 1) { cd $final_local; echo $final_local; liga; (function created by you TODO something) } }


$path = "C:/temp/" If(!(test-path $path)) {md C:/Temp/}

  • La primera línea crea una variable llamada $path y le asigna el valor de cadena de "C: / temp /"

  • La segunda línea es una instrucción If que se basa en el cmdlet Test-Path para verificar si la variable $path NO existe. El no existe se califica utilizando el ! símbolo

  • Tercera línea: SI la ruta almacenada en la cadena anterior NO se encuentra, se ejecutará el código entre los corchetes

md es la versión abreviada de la escritura: New-Item -ItemType Directory -Path $path

Nota: no he probado utilizando el parámetro -Force con lo siguiente para ver si hay un comportamiento no deseado si la ruta ya existe.

New-Item -ItemType Directory -Path $path


$path = "C:/temp/NewFolder" If(!(test-path $path)) { New-Item -ItemType Directory -Force -Path $path }

Test-Path comprueba si existe la ruta. Cuando no lo haga, creará un nuevo directorio.