我正在尝试创建数千个文件共享(如果尚不存在)。
我必须这样做,因为我正在使用旧系统。
在单个线程中同步执行此操作会花费很长时间。我正在努力使它成为多线程的,但是如果可以的话,那会很棒:
几个SMB与1个C#API / powershell命令共享。我已经尝试使用Google搜索答案已有一段时间了,但没有发现任何有用的结果。 :(
答案 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