🐕

FileMaker セキュリティー設定 自動登録

2022/07/11に公開

動作検証
Windows 10
FIleMaker Pro 19

WinAppDriver.exe をインストール
Selenium を設定
PowerShell で実行

https://twitter.com/qbxxdp/status/1544891015202750464?s=20&t=YlIK5RRauWVI1zfrzVwkAw

設定

WinAppDriver.exe をインストール

https://github.com/microsoft/WinAppDriver/releases

Selenium

WebDriver.dll と、WebDriver.Support.dll を任意の場所へ保存

selenium-dotnet-..*.zip
https://github.com/SeleniumHQ/selenium/releases/tag/selenium-4.1.0

  • WebDriver.dll
  • WebDriver.Support.dll

Selenium.WebDriver.4.1.1.nupkg
↓ 拡張子変更
Selenium.WebDriver.4.1.1.zip

Selenium.WebDriver.4.1.1.zip\lib\net48\WebDriver.dll → D:\Selenium\WebDriver.dll 保存

Selenium.Support.4.1.1.nupkg
↓ 拡張子変更
Selenium.Support.4.1.1.zip

Selenium.Support.4.1.1.zip\lib\net48\WebDriver.Support.dll → D:\Selenium\WebDriver.Support.dll 保存

実行

PowerShellで実行

Function SetSelected($element,$bool) {
    if($bool -eq $true){
        if($element.Selected -eq $false){
            $element.Click();
        }
    }else{
            if($element.Selected -eq $true){
            $element.Click();
        }
    }
}



$Path='C:\Program Files (x86)\Windows Application Driver\WinAppDriver.exe';
Start-Process -windowstyle 'Minimized' -FilePath $Path -ArgumentList 5723;

Add-Type -Path 'D:\Selenium\WebDriver.dll' ;
Add-Type -Path 'D:\Selenium\WebDriver.Support.dll' ;

<# デスクトップ操作用ドライバインスタンスを生成 #>
$capabilities=New-Object OpenQA.Selenium.Remote.DesiredCapabilities;
$capabilities.setCapability('app', 'Root');
$uri = New-Object System.Uri('http://127.0.0.1:5723'); <#4723#>
$driver=New-Object OpenQA.Selenium.Remote.RemoteWebDriver($uri,$capabilities);

$app = $driver.findElementByClassName('FMPRO19.0APP');
$app.SendKeys([OpenQA.Selenium.Keys]::Alt + 'F');
$app.SendKeys('M');
$app.SendKeys('T');


$elements=$app.findElementsByTagName('Window');
$winbdowName="";
foreach ($item in $elements)
{
    if($item.Text -like  "*のセキュリティの管理"  )
    {
    $winbdowName=$item.Text;
    break;
     #Write-Host $item.Text
    }
 

}

$element=$app.FindElementByName($winbdowName);

$element.SendKeys([OpenQA.Selenium.Keys]::Alt + 'A');

$elements=$app.findElementsByTagName('Window');
$winbdowName="";
foreach ($item in $elements)
{
    if($item.Text -like  "*の詳細セキュリティ設定"  )
    {
    $winbdowName=$item.Text;
    break;
     #Write-Host $item.Text
    }
 

}

$element=$app.FindElementByName($winbdowName);



$item=$null;

$item=$element.FindElementByName('Custom_データ入力');

if($item -eq $null){
$element.SendKeys([OpenQA.Selenium.Keys]::Alt + 'N');
}else{
$item.Click();
$element.SendKeys([OpenQA.Selenium.Keys]::Alt + 'D');
}





$Window = $app.findElementByName('アクセス権セットの編集');
$appDriver=$Window;


$elements=$appDriver.FindElementsByName('アクセス権セットの名前(N)');
$element=$elements.FindElementsByTagName('Edit');
$element.Clear();
$element.SendKeys('Custom_データ入力');

$elements=$appDriver.FindElementsByName('説明(D)');
$element=$elements.FindElementsByTagName('Edit');
$element.Clear();
$element.SendKeys('説明');


$elements=$appDriver.FindElementsByName('レコード(R):');
$element=$elements.FindElementsByClassName('ComboBox');
$element.SendKeys('すべてのテーブルでの作成、編集、および削除');

$elements=$appDriver.FindElementsByName('レイアウト(L):');
$element=$elements.FindElementsByClassName('ComboBox');
$element.SendKeys('すべて表示のみ');

$elements=$appDriver.FindElementsByName('値一覧(V):');
$element=$elements.FindElementsByClassName('ComboBox');
$element.SendKeys('すべて表示のみ');

$elements=$appDriver.FindElementsByName('スクリプト(S):');
$element=$elements.FindElementsByClassName('ComboBox');
$element.SendKeys('すべて実行のみ可能');




<# 拡張アクセス権(E) すべてFalseにする #>
$CheckBox=$appDriver.FindElementsByTagName('CheckBox');
foreach ($item in $CheckBox)
{
  if($item.Text -eq ''){
  #$item.Click();
  SetSelected $item $false;
  Write-Host $item
  }
}


$list=@(
"FileMaker WebDirect によるアクセス (fmwebdirect)"
,"ODBC/JDBC によるアクセス (fmxdbc)"
,"FileMaker ネットワークによるアクセス (fmapp)"
,"スリープ/バックグラウンドで指定した時間を経過した場合再認証を要求する。FileMaker Go のみ。 (fmreauthenticate480)"
,"XML Web 公開でのアクセス - FMS のみ (fmxml)"
,"PHP Web 公開でのアクセス - FMS のみ (fmphp)"
,"スリープ/バックグラウンドで指定した時間を経過した場合再認証を要求します。 (fmreauthenticate10)"
,"fmscriptdisabled"
,"Apple Event および ActiveX による FileMaker 操作の実行を許可 (fmextscriptaccess)"
,"URL による FileMaker スクリプトの実行を許可 (fmurlscript)"
,"FileMaker Data API でのアクセス (fmrest)"
,"OData でのアクセス (fmodata)"
)

$list=@(
"FileMaker ネットワークによるアクセス (fmapp)"
,"URL による FileMaker スクリプトの実行を許可 (fmurlscript)"
)

foreach ($item in $list)
{
Write-Host $item
$element=$appDriver.FindElementByName($item);
$element.Click();
$appDriver.SendKeys([OpenQA.Selenium.Keys]::Space);
}




$element=$appDriver.FindElementByName('印刷を許可(P)');
SetSelected $element $true;
$element=$appDriver.FindElementByName('エクスポートを許可(X)');
SetSelected $element $true;
$element=$appDriver.FindElementByName('拡張アクセス権の管理(M)');
SetSelected $element $false;
$element=$appDriver.FindElementByName('完全アクセスのないアカウントを管理(A)');
SetSelected $element $false;
$element=$appDriver.FindElementByName('ユーザによるデータ入力警告の無視を許可(O)');
SetSelected $element $false;
$element=$appDriver.FindElementByName('アイドル状態の時、サーバーからユーザの接続を解除する(I)');
SetSelected $element $false;
$element=$appDriver.FindElementByName('ユーザによるパスワードの変更を許可(W)');
SetSelected $element $false;


$element=$appDriver.FindElementByName('変更を要求する間隔(C):');
SetSelected $element $false;

$element=$appDriver.FindElementByName('パスワードの最小の長さ(H):');
SetSelected $element $false;

$elements=$appDriver.FindElementsByTagName('Edit');
<#変更を要求する間隔(C):#>
#$elements[2].SendKeys('30');
<#パスワードの最小の長さ(H):#>
#$elements[3].SendKeys('5');


$elements=$appDriver.FindElementsByName('利用できるメニューコマンド(U):');
$element=$elements.FindElementsByClassName('ComboBox');
$element.SendKeys('すべて');

Discussion