Мой скрипт в пакетном режиме main.bat
должен вызывать другой скрипт в Powershell 07-PermissionsChecking.ps1
, но вместо этого он открывает свойства мыши, и я понятия не имею, почему он это делает.
Когда я запускаю 07-PermissionsChecking.ps1
непосредственно из Powershell, он работает нормально, как и ожидалось. Этот код пытается открыть папки на общем диске и пытается создать файлы для проверки прав доступа для чтения и записи для пользователя.
Может ли кто-нибудь помочь заставить его работать, звоня с main.bat
?
РЕДАКТИРОВАТЬ: После того, как я переименовал функцию, ранее названную «основной» в «myfunction», ошибка изменилась на:
"-myfunction : The term 'myfunction' is not recognizer as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again."
main.bat
:
Powershell -command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser"
Powershell -noexit "& ""Y:\02 - Installations\Batch files\07-PermissionsChecking.ps1"""
07-PermissionsChecking.ps1
:
clear
$error.Clear()
$AvailableProjectsPath = "\\Abrrec01fscp030\swc$\HIL\Available Projects\AccessCtrl"
$WorkspacePath = "\\Abrrec01fscp030\swc$\HIL\Available Projects\Workspace\AccessCtrl"
$WorkInProgressPath = "\\Abrrec01fscp030\swc$\HIL\Work In Progress\AccessCtrl"
$currentDate = (Get-Date).ToString('MM/dd/yyyy')
$currentTime = (Get-Date).ToString('HH:mm:sstt')
$text = ""
myfunction
function myfunction{
if (Test-Connection -ComputerName Abrrec01fscp030 -Quiet -Count 1){
CheckAccessStatus $AvailableProjectsPath
CheckAccessStatus $WorkspacePath
CheckAccessStatus $WorkInProgressPath
}
else
{
Write-Host "Make sure you are connected to FIATAUTO network"
}
}
function CheckAccessStatus{
Param ([string]$path)
if(CheckReadAccessStatus $path)
{
if(CheckWriteAccessStatus $path)
{
$AccessStatus = "R/W";
} else
{
$AccessStatus = "R";
}
} else
{
$AccessStatus = "-RW";
}
$toPrint = "$env:UserName,$env:ComputerName,$currentDate,$currentTime,$path,$AccessStatus"
Write-Host $toPrint
add-content -path "$PSScriptRoot\$env:UserName.txt" -value "$toPrint"
}
function CheckReadAccessStatus {
Param ([string]$path)
$readAccessStatus = [bool]1 #0: No read access. 1: read access.
try {
$error.Clear()
ii $path -ErrorAction "Stop"
$shell = New-Object -ComObject Shell.Application
Start-Sleep -Seconds 1
$window = $shell.Windows() | Where-Object { $_.LocationURL -like "$(([uri]$path).AbsoluteUri)*" }
$window | ForEach-Object { $_.Quit() }
}
catch [System.UnauthorizedAccessException]{ #$Error[0].Exception.GetType().FullName
$readAccessStatus = [bool]0
}
$ErrorActionPreference = "Continue"; #Reset the error action pref to default
return $readAccessStatus
}
function CheckWriteAccessStatus {
Param ([string]$path)
$writeAccessStatus = [bool]1 #0: No write access. 1: write access.
try {
$error.Clear()
$toPrint = "$env:UserName,$env:ComputerName,$currentDate,$currentTime,$path,3"
add-content -path "$path\$env:UserName.txt" -value "$toPrint"
}
catch [System.UnauthorizedAccessException]{ #$Error[0].Exception.GetType().FullName
$writeAccessStatus = [bool]0
}
$ErrorActionPreference = "Continue"; #Reset the error action pref to default
return $writeAccessStatus
}