使用 PowerShell 在远程服务器中创建文件夹 [重复]

Posted

技术标签:

【中文标题】使用 PowerShell 在远程服务器中创建文件夹 [重复]【英文标题】:Create folder in remote server with PowerShell [duplicate] 【发布时间】:2021-08-23 10:45:34 【问题描述】:

我尝试制作一个在远程服务器列表中创建文件夹的脚本。我做了这个,但我看到的问题是函数没有正确地制作路径。

这是代码:

$p_serverstq = "\\127.0.0.1\test_share\logs" ,"\\192.168.1.10\test_share\logs"

$p_carpetas = "\servicio_prueba\winevt", "\servicio_prueba\iislog", "\servicio_prueba\applogs"


function crea_carpeta 
    param($server, $carpeta)
  
    #New-Item -ItemType directory "$server\$carpeta"    
    Write-Host "$server\$carpeta"



foreach ($server in $p_serverstq) 

    foreach($carpeta in $p_carpetas) 

      crea_carpeta($server, $carpeta)
     
    


我把这个“写主机”,我看到功能没有正确地制作路线

这是输出:

\127.0.0.1\test_share\logs\servicio_prueba\winevt \127.0.0.1\test_share\logs \servicio_prueba\iislog \127.0.0.1\test_share\logs \servicio_prueba\applogs \192.168.1.10\test_share\logs\servicio_prueba\winevt \192.168.1.10\test_share\logs\servicio_prueba\iislog \192.168.1.10\test_share\logs\servicio_prueba\applogs\

在“...\logs”和“\servicio....”之间有一个空格,我不知道如何解决这个问题。

感谢和抱歉我的英语不好

【问题讨论】:

简而言之:必须调用 PowerShell 函数、cmdlet、脚本和外部程序-foo('arg1', 'arg2')。如果您使用, 分隔参数,您将构造一个命令将其视为单个参数数组。为防止意外使用方法语法,请使用Set-StrictMode -Version 2 或更高版本,但请注意其其他影响。请参阅this answer 了解更多信息。 【参考方案1】:

像这样调用你的函数

crea_carpeta $server $carpeta
# or
crea_carpeta -server $server -carpeta $carpeta

不要这样打电话

crea_carpeta($server, $carpeta)

另外,将路径的两个部分连接在一起使用

Join-Path -Path $server -ChildPath $carpeta
# instead of "$server\$carpeta"

【讨论】:

【参考方案2】:

使用路径时的良好做法,始终使用Split-PathJoin-PathResolve-Path

此外,应在 Powershell 中使用 -ArgumentName 调用参数。 当您使用($server, $carpeta) 调用您的函数时,您实际上是将array 作为参数传递给$Server 参数。

示例

PS /> ($server, $carpeta)
\\192.168.1.10\test_share\logs
\servicio_prueba\applogs
PS /> ($server,$carpeta).GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                       
-------- -------- ----                                     --------                                                                                                       
True     True     Object[]                                 System.Array                                                                                                   

PS /> [string]($server,$carpeta)
\\192.168.1.10\test_share\logs \servicio_prueba\applogs

PS /> Write-Host ($server, $carpeta)
\\192.168.1.10\test_share\logs \servicio_prueba\applogs
$p_serverstq = "\\127.0.0.1\test_share\logs" ,"\\192.168.1.10\test_share\logs"
$p_carpetas = "\servicio_prueba\winevt", "\servicio_prueba\iislog", "\servicio_prueba\applogs"


function crea_carpeta 
param(
    [string]$Server,
    [string]$Carpeta
)
  
    #New-Item -ItemType directory "$server\$carpeta"    
    Join-Path $server -ChildPath $carpeta



foreach ($server in $p_serverstq)

    foreach($carpeta in $p_carpetas)
    
        crea_carpeta -Server $server -Carpeta $carpeta
    

输出

\\127.0.0.1\test_share\logs\servicio_prueba\winevt
\\127.0.0.1\test_share\logs\servicio_prueba\iislog
\\127.0.0.1\test_share\logs\servicio_prueba\applogs
\\192.168.1.10\test_share\logs\servicio_prueba\winevt
\\192.168.1.10\test_share\logs\servicio_prueba\iislog
\\192.168.1.10\test_share\logs\servicio_prueba\applogs

【讨论】:

以上是关于使用 PowerShell 在远程服务器中创建文件夹 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 powershell 在服务器上保存文件

如何使用 Powershell Commandlets 在应用服务环境中创建 Azure WebApp

在PowerShell中创建以当前日期为名称的文件夹

powershell PowerShell:在“发送到”文件夹中创建“发送到”快捷方式。

是否可以使用 powershell 在存储帐户中创建 blob?

powershell Powershell函数用于在库中的SharePoint中创建文件夹和子文件夹