2016-10-19 2 views
1

Требование: Я пытаюсь создать папку BKP на 10 серверах, используя приведенный ниже код, но некоторые, как он не создает новую папку на серверах.Как создавать папки динамически с помощью PowerShell?

foreach ($instance in Get-Content "C:\servers\List.txt") 
{ 
    $local = Get-Location; 
    $final_local = "C:\BKP"; 

    if (!$local.Equals("C:\")) 
    { 
     cd "C:\"; 
     if ((Test-Path $final_local) -eq 0) 
     { 
      mkdir $final_local; 
      cd $final_local; 
     } 

     ## if path already exists 
     ## DB Connect 
    } 
} 
+0

mkdir для создания новой папки? – saftargholi

+0

Привет, Arashzag, спасибо за ответ, Уже я использовал mkdir в своем коде. Вы можете попробовать поделиться кодом, который может мне помочь. – Franklin

+0

Вы хотите создать новую папку с $ final_local? – saftargholi

ответ

2

Первый: вы используете неправильный тест, вы должны использовать:

if($local.Path -eq "C:\") 

Равный метода есть для сравнения объектов имеет вид на:

$local | get-member 
$local | fl * 

Будьте осторожны с объектами возврата CmdLet PowerShell.

Второй: если $local.Path равно "C:\", вы ничего не создадите.


Ваш код будет выглядеть следующим образом:

ForEach ($instance in $(Get-Content "C:\servers\List.txt")) 
{ 
    $local = Get-Location; 
    $final_local = "C:\BKP"; 

    if($local.Path -ne "C:\") 
    { 
    cd "C:\"; 
    if((Test-Path $final_local) -eq 0) 
    { 
     mkdir $final_local; 
     cd $final_local; 
    } 

    ## if path already exists 
    ## DB Connect 
} 
+0

Его созданная папка в локальном, а не удаленных серверах, указанная в файле c: \ server \ list.txt. – Franklin

+0

Ваш тест не является хорошим. 'Equals' не делают то, что вы ожидаете. – JPBlanc

+0

Спасибо JPBlanc за ваш ответ. Я не понял. Пожалуйста, измените мой код. – Franklin

0

использовать эту команду для создания каталога:

ForEach ($instance in Get-Content "C:\servers\List.txt") 

{ 
$local = Get-Location; 
$final_local = "C:\BKP"; 

if(!$local.Equals("C:\")) 
{ 
    cd "C:\"; 
    if((Test-Path $final_local) -eq 0) 
    { 
     New-Item -ItemType Directory -Force -Path "$final_local"; 
     cd $final_local; 

    } 

    ## if path already exists 
    ## DB Connect 

} 

} 
+0

Я не нашел никакой разницы для сценария, который я опубликовал, и вышеприведенного кода. – Franklin

+0

все еще я вижу, что папка создана только локально – Franklin

+0

Может кто-нибудь мне помочь по этой теме – Franklin

0

Попробуйте использовать Invoke-Command Я предполагаю учетные данные необходимы для серверов, может пропустить его, если он работает для вас.

 
$credentials = Get-Credential 

$create = { $local = Get-Location; 
      $final_local = "C:\BKP" 

      if(!$local.Equals("C:\")){ 
       cd "C:\"; 
       if((Test-Path $final_local) -eq 0){ 
         New-Item -ItemType Directory -Force -Path "$final_local"; 
         cd $final_local; 
       } 
     ## if path already exists 
      ## DB Connect 
    } 
} 
ForEach ($instance in Get-Content "C:\servers\List.txt") { 
Invoke-Command -ScriptBlock $create -ComputerName $instance -Credential $credentials 
} 
+0

Thansk Ashu за вашу помощь, но, к сожалению, она не работает. Я имею в виду ее создание только на локальном диске. – Franklin