如何通过Powershell或C#创建或查询多个SMB共享

时间:2018-10-08 19:59:56

标签: c# windows powershell smb

我正在尝试创建数千个文件共享(如果尚不存在)。

我必须这样做,因为我正在使用旧系统。

在单个线程中同步执行此操作会花费很长时间。我正在努力使它成为多线程的,但是如果可以的话,那会很棒:

  • 创建
  • 检查
  • 是否存在

几个SMB与1个C#API / powershell命令共享。我已经尝试使用Google搜索答案已有一段时间了,但没有发现任何有用的结果。 :(

2 个答案:

答案 0 :(得分:0)

使用CIM cmdlet需要PS 3.0或更高版本,因此,获得共享win32_share是最佳选择,并且创建使用net share。您可以创建脚本以在本地运行并将其包装在Invoke-Command中,-ComputerName接受计算机数组,它将处理批处理和线程处理。

Invoke-Command -ComputerName $Servers -ScriptBlock { #your command }

Invoke-Command -ComputerName $Servers -FilePath <your script path>

也请参见-ThrottleLimit参数进行批处理。

Get-Help Invoke-Command -Full

答案 1 :(得分:0)

仍有关于要创建的服务器和SHARENAME的信息要记录。所有COMPUTERNAME上的共享名称都相同吗?它是一个具有许多SHARENAME的COMPUTERNAME吗?此代码可能会给您一些想法。它可以在Windows 7和当前的PowerShell 5.1上运行。

#   Find CIM classes about shares.
#
#   Get-CimClass | Where-Object { $_.CimClassName -match '.*share.*' }
#
#   Find out which shares are already available.
#
#   Get-CimInstance -ClassName Win32_Share
#
#   Find class methods
#
#   Get-CimClass | Where-Object { $_.CimClassName -match '.*share.*' } | ForEach-Object { $_.CimClassMethods }
#
#   Find the arguments of a method.
#
#   (Get-CimClass -ClassName Win32_Share).CimClassMethods['Create'].Parameters

$Arguments = @{
    Path = 'C:\Users\Public'
    Name = 'TESTSHARE_TTTTTTTTTT';
    Type = [uint32]0;
}

Invoke-CimMethod -ClassName Win32_Share -MethodName Create -Arguments $Arguments