运行 PS1 来自批处理文件的文件,拇指驱动器上的同一文件夹
Running PS1 file from batch file, same folder on thumb drive
诚然,我不是脚本编写者。我拼凑了一些已经有效但正在努力学习的东西。
我有一个脚本可以为我自己和我们的技术人员完成大量手动设置扫描用户的工作。这是它的一小部分写成批处理文件。在暂停之前的最后,我想调用 PowerShell 来显示网络类型是什么,而不是更改它。至少现在不是。我确实从文件中删除了很多额外内容以保存 space。批处理文件和 PS1 文件将位于拇指驱动器上的同一文件夹中。
nettype.ps1 文件只有:
get-netconnectionprofile
pause
暂停当然是为了让技术人员可以看到网络类型。
希望有人有一个简单的解决方案。我确实看过这里和其他网站。我可能没有在搜索中使用正确的术语或没有理解我需要做什么。
net user Scans Scanner1 /add
net localgroup administrators Scans /add
wmic UserAccount where Name='Scans' set PasswordExpires=False
md C:\Scans
@echo off
NET SHARE Scans=C:\Scans /Grant:Scans,Full
ICACLS "C:\Scans" /Grant Scans:(OI)(CI)(F) /t /c
ICACLS "C:\Scans" /Grant Everyone:(OI)(CI)(F) /t /c
netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes
netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes
PowerShell.exe -File "nettype.ps1"
pause
我找到了答案,知道这很简单。
只需在批处理文件中使用以下内容:
powershell.exe -ExecutionPolicy Bypass -File ""%~dp0nettype.ps1""
您可以将 powershell 调用更改为以下内容以在同一目录中查找 ps1 文件:
powershell.exe -File "%~dp0nettype.ps1"
%~dp0
是 %0
变量和 ~d
和 ~p
修饰符的组合。
%0
是当前批处理文件的完整路径。
~d
与 %0
结合使用时(例如 %~d0
)将使您从 %0
. 获得驱动器号部分(例如 C:)
~p
与 %0
结合使用时(例如 %~p0
)将为您提供不带文件名的 %0
的路径部分。
- 将它们组合在一起,
%~dp0
,将为您提供当前批处理文件所在文件夹的完整路径。
您可以在此处找到这些修饰符的完整列表:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb490909(v=technet.10)?redirectedfrom=MSDN
需要注意的一件事是,%~dp0
修饰符仅适用于批处理文件,当您尝试直接在命令行上 运行 时无效。
如果你的 powershell script, don't run it as a script, delete it and just run the command directly in your batch-file 里面只有这些:
"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -Command "Get-NetConnectionProfile"
可能可以缩短为:
PowerShell Get-NetConnectionProfile
诚然,我不是脚本编写者。我拼凑了一些已经有效但正在努力学习的东西。
我有一个脚本可以为我自己和我们的技术人员完成大量手动设置扫描用户的工作。这是它的一小部分写成批处理文件。在暂停之前的最后,我想调用 PowerShell 来显示网络类型是什么,而不是更改它。至少现在不是。我确实从文件中删除了很多额外内容以保存 space。批处理文件和 PS1 文件将位于拇指驱动器上的同一文件夹中。
nettype.ps1 文件只有:
get-netconnectionprofile
pause
暂停当然是为了让技术人员可以看到网络类型。
希望有人有一个简单的解决方案。我确实看过这里和其他网站。我可能没有在搜索中使用正确的术语或没有理解我需要做什么。
net user Scans Scanner1 /add
net localgroup administrators Scans /add
wmic UserAccount where Name='Scans' set PasswordExpires=False
md C:\Scans
@echo off
NET SHARE Scans=C:\Scans /Grant:Scans,Full
ICACLS "C:\Scans" /Grant Scans:(OI)(CI)(F) /t /c
ICACLS "C:\Scans" /Grant Everyone:(OI)(CI)(F) /t /c
netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes
netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes
PowerShell.exe -File "nettype.ps1"
pause
我找到了答案,知道这很简单。
只需在批处理文件中使用以下内容:
powershell.exe -ExecutionPolicy Bypass -File ""%~dp0nettype.ps1""
您可以将 powershell 调用更改为以下内容以在同一目录中查找 ps1 文件:
powershell.exe -File "%~dp0nettype.ps1"
%~dp0
是 %0
变量和 ~d
和 ~p
修饰符的组合。
%0
是当前批处理文件的完整路径。~d
与%0
结合使用时(例如%~d0
)将使您从%0
. 获得驱动器号部分(例如 C:)
~p
与%0
结合使用时(例如%~p0
)将为您提供不带文件名的%0
的路径部分。- 将它们组合在一起,
%~dp0
,将为您提供当前批处理文件所在文件夹的完整路径。
您可以在此处找到这些修饰符的完整列表:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb490909(v=technet.10)?redirectedfrom=MSDN
需要注意的一件事是,%~dp0
修饰符仅适用于批处理文件,当您尝试直接在命令行上 运行 时无效。
如果你的 powershell script, don't run it as a script, delete it and just run the command directly in your batch-file 里面只有这些:
"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -Command "Get-NetConnectionProfile"
可能可以缩短为:
PowerShell Get-NetConnectionProfile