【问题标题】:How to create folders dynamically using PowerShell?如何使用 PowerShell 动态创建文件夹?
【发布时间】:2016-10-19 16:52:51
【问题描述】:

要求:我正在尝试使用以下代码在 10 台服务器中创建 BKP 文件夹,但有些原因是它没有在服务器中创建新文件夹。

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
    }
}

【问题讨论】:

  • mkdir 用于制作新文件夹?
  • 嗨 Arashzag,感谢您的回复,我已经在我的代码中使用了 mkdir。你能尝试分享可以帮助我的代码吗?
  • 你想用 $final_local 路径创建新文件夹吗?

标签: powershell


【解决方案1】:

首先:你使用了错误的测试,你应该使用:

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

equal 方法是用来比较对象的看看:

$local | get-member
$local | fl *

小心 PowerShell CmdLet 返回对象

第二个:如果$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
}

【讨论】:

  • 它在本地创建文件夹,而不是在 c:\server\list.txt 中指定的远程服务器
  • 你的测试不是很好.Equals不要做你期望的。
  • 感谢 JPBlanc 的回复。我不明白。请更改我的代码。
  • 我不会尝试理解上下文,我只是更改您的测试(if 子句)。
  • @Franklin - 您正在遍历服务器列表的内容,但您无法连接到该服务器 *(通过共享或远程处理)来创建文件夹。
【解决方案2】:

使用此命令创建目录:

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

}

} 

【讨论】:

  • 我没有发现我发布的脚本和上面的代码有什么不同。
  • 我仍然可以看到该文件夹​​仅在本地创建
  • 有人能帮我解决这个话题吗
【解决方案3】:

尝试使用调用命令,我假设服务器需要凭据,如果它适合您,则可以跳过它。

$credentials = 获取证书 $create = { $local = 获取位置; $final_local = "C:\BKP" if(!$local.Equals("C:\")){ CDC:\”; if((测试路径 $final_local) -eq 0){ 新项目 -ItemType 目录 -Force -Path "$final_local"; cd $final_local; } ##如果路径已经存在 ## 数据库连接 } } ForEach ($instance in Get-Content "C:\servers\List.txt") { 调用命令 -ScriptBlock $create -ComputerName $instance -Credential $credentials }

【讨论】:

  • 感谢阿舒的帮助,但不幸的是它不起作用。我的意思是它只在本地驱动器上创建。
猜你喜欢
  • 2011-06-13
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多