代码之家  ›  专栏  ›  技术社区  ›  user1071840

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

  •  0
  • user1071840  · 技术社区  · 6 年前

    我正在尝试创建数千个文件共享,如果它们还不存在的话。

    我必须这么做,因为我正在开发一个遗留系统。

    在一个线程中同步执行此操作需要花费非常长的时间。我正在努力使其多线程,但如果我能:

    • 创造
    • 检查是否存在

    多个SMB共享1个C#API/powershell命令。我在谷歌上搜索答案已经有一段时间了,但没有找到任何有用的结果(

    2 回复  |  直到 6 年前
        1
  •  0
  •   Prasoon Karunan V    6 年前

    使用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

        2
  •  0
  •   lit    6 年前

    关于您正在创建的服务器和共享名,还有一些信息需要记录。所有计算机名上的共享名都相同吗?是一个计算机名和多个共享名吗?这段代码可能会给你一些想法。它在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