简单的 PowerShell 脚本,使目录与所有人共享,并将其映射为共享网络驱动器
Simple PowerShell script to make a directory share it with everyone permission and map it as a shared network drive
我正在尝试为一个不识字的朋友自动执行一项简单但重复的任务。我是一名电视编辑,但我对此有简单的工作知识,所以我很欣赏你的技能和知识。
在 Windows PC 上,可以使用 PowerShell,我想要一个脚本(我真的很想要一个 GUI,但那是做梦),
在特定的硬编码位置创建一个新目录 - 检查是否不存在同名的现有目录,等等。
新目录分享给大家,完全read/write权限
新目录已映射,与下一个可用驱动器号保持一致,跳过光学媒体/卡 reader 驱动器号。
注意:如前所述,网络共享必须在重启后保持不变。
研究建议 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
大可不必。只创建文件夹,如果它已经存在,它将失败。
批量使用 MD
又名 mkdir
命令。
md c:\somepath\somefolder
这更快,因为只有一个磁盘访问并且使用更少的系统资源。
您同时拥有 file/folder 权限和共享权限。
icacls c:\somepath\somefolder /grant everyone:F
net share sharename=c:\somefolder /grant:everyone,FULL
映射驱动器
但我很困惑 - 映射驱动器对用户有什么好处?
net use * \server\share\folder /persistant:yes
当然还有 mkdir /?
、icacls /?
、net help share
、net help use
、
所以我想我已经解决了我自己的问题,新手在传递变量时语法/语法很混乱...
# 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
我正在尝试为一个不识字的朋友自动执行一项简单但重复的任务。我是一名电视编辑,但我对此有简单的工作知识,所以我很欣赏你的技能和知识。
在 Windows PC 上,可以使用 PowerShell,我想要一个脚本(我真的很想要一个 GUI,但那是做梦),
在特定的硬编码位置创建一个新目录 - 检查是否不存在同名的现有目录,等等。
新目录分享给大家,完全read/write权限
新目录已映射,与下一个可用驱动器号保持一致,跳过光学媒体/卡 reader 驱动器号。
注意:如前所述,网络共享必须在重启后保持不变。
研究建议 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
大可不必。只创建文件夹,如果它已经存在,它将失败。
批量使用
MD
又名mkdir
命令。md c:\somepath\somefolder
这更快,因为只有一个磁盘访问并且使用更少的系统资源。
您同时拥有 file/folder 权限和共享权限。
icacls c:\somepath\somefolder /grant everyone:F net share sharename=c:\somefolder /grant:everyone,FULL
映射驱动器
但我很困惑 - 映射驱动器对用户有什么好处?
net use * \server\share\folder /persistant:yes
当然还有 mkdir /?
、icacls /?
、net help share
、net help use
、
所以我想我已经解决了我自己的问题,新手在传递变量时语法/语法很混乱...
# 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