【问题标题】:Simple PowerShell script to make a directory share it with everyone permission and map it as a shared network drive简单的 PowerShell 脚本,使目录与所有人共享,并将其映射为共享网络驱动器
【发布时间】:2015-07-04 22:21:51
【问题描述】:

我正在尝试为不识字的朋友自动执行一项简单但重复的任务。我是一名电视编辑,但我对此有简单的工作知识,因此我很欣赏你的技能和知识。

在 Windows PC 上,可以使用 PowerShell,我想要一个脚本(我真的很想要一个 GUI,但那是在做梦)

  1. 在特定的硬编码位置创建一个新目录 - 检查不存在同名的现有目录等。

  2. 新目录与所有人共享,完全读/写权限

  3. 映射新目录,与下一个可用驱动器号保持一致,跳过光学介质/读卡器驱动器号。

注意:如前所述,网络共享在重启后必须保持不变。

研究建议为 1(但需要更多检查重复项等):

# PowerShell creates a folder
$Location = "X:\Clients\"
New-Item -Path $Location -Name "My_New_Folder" -ItemType "directory"
#Invoke-Item $Location

研究建议 2: ?不知道从哪里开始

研究建议 3:

@echo off
setlocal

call :freedrive mydriveletter && goto :cont
echo ERROR: No free drive letter found.
goto :exit
:cont
echo Found drive letter: %mydriveletter%

goto :exit

rem Finds a free drive letter.
rem
rem Parameters:
rem     %1 = Output variable name.
rem
rem Example:
rem     call :freedrive mydriveletter && goto :cont
rem     echo ERROR: No free drive letter found.
rem     goto :EOF
rem     :cont
rem     echo Found drive letter: %mydriveletter%
:freedrive
setlocal EnableDelayedExpansion
set exitcode=0
set "output_var=%~1"
for %%i in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
    set "drive=%%i:"
    rem If 'subst' fails, the drive letter is already in use.
    rem This way we can even detect optical drives that have a drive
    rem letter but no media in them, a case that goes undetected when
    rem using 'if exist'.
    subst !drive! %SystemDrive%\ >nul
    if !errorlevel! == 0 (
        subst !drive! /d >nul
        goto :freedrive0
    )
)
set exitcode=1
set drive=
:freedrive0
endlocal & set "%output_var%=%drive%" & exit /b %exitcode%

:exit
pause

【问题讨论】:

  • 刚刚注意到 3 我建议使用“subst”,但我更喜欢“net use”,以便在重新启动后持续使用,除非有人可以提出其他建议。谢谢。

标签: windows batch-file net-use


【解决方案1】:
  1. 没必要。只需创建文件夹,如果它已经存在,它将失败。

    批量使用MD aka mkdir 命令。

    md c:\somepath\somefolder
    

    这更快,因为只有一个磁盘访问并且使用更少的系统资源。

  2. 您拥有文件/文件夹权限和共享权限。

    icacls c:\somepath\somefolder /grant everyone:F
    
    net share sharename=c:\somefolder /grant:everyone,FULL
    
  3. 映射驱动器

    但我很困惑 - 映射驱动器对用户有什么好处?

    net use * \\server\share\folder /persistant:yes
    

当然还有mkdir /?icacls /?net help sharenet help use

【讨论】:

  • 最好有一个脚本,其中“新文件夹名称在此处”被编辑,然后运行处理其余部分。共享文件夹的原因是使用驱动器号安装它,以便我朋友的视频编辑系统在每个作业中获得一个谨慎的音量。该软件仅将媒体存储到每个卷上自己的位置,因此这是保持事物整洁的一种巧妙方法。每个项目一个驱动器。谢谢。
  • 能否合理化上述内容,以便脚本采用新目录的名称,然后自动将其传递给剩余的阶段?这超出了我的范围,但我可以看到它的逻辑。
  • 我觉得我最初根据我的经验水平提出的要求没有得到很好的答复。自学虽然毫无疑问是有益的,但会花费我一个年龄或以失败告终。我相信 $name = Read-Host '您的文件管理器名称是什么?可能对我原来的帖子有用。
  • 好的,我到了某个地方 #PowerShell 创建了一个文件夹 $folder = Read-Host '在此处输入您的新目录的名称' $Location = "C:\Clients\" New-Item -Path $Location -Name "$folder" -ItemType "directory" #Invoke-Item $Location ......那么添加 $Location 和 $folder 以在 icacls c:\somepath\somefolder / 中设置路径的正确方法是什么授予所有人:F net share sharename=c:\somefolder /grant:everyone,FULL
【解决方案2】:

所以我想我已经解决了我自己的问题,语法/语法对于新手来说是令人困惑的传递变量......

# create a folder with user input
$folder = Read-Host 'Name a new directory to be created in the Clients folder'
$Location = "C:\Clients\"
New-Item -Path $Location -Name "$folder" -ItemType "directory"
# set permission
icacls "$Location$folder" /grant everyone:F
# share folder
net share $folder="$Location$folder" /GRANT:EVERYONE`,FULL
# map folder as drive
net use * /persistent:yes \\localhost\$folder 

【讨论】:

    猜你喜欢
    • 2021-11-05
    • 2011-10-14
    • 2012-02-16
    • 2014-06-25
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2017-10-14
    • 2017-02-20
    相关资源
    最近更新 更多