www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Windows Share Path

reply Vino <vino.bheeman hotmail.com> writes:
Hi All,

   Request your help, I have samll program which validates the 
file path, the script run perfectly when i run it manually, but 
if i run it via windows task scheduler i am getting "Invalid File 
Path <Path> or Path do not Exist", The path is a windows share, 
Even tried to add the net path as "\\\\server\\share$\\BACKUP" 
for the parameter "p" in the below code but no luck, the same 
error.

Even tried to call this program via .bat script not luck same 
error

Windows .BAT program
 echo off
cd D:\DScript
start /D D:\DScript /B /WAIT D:\DScript\TestDir.exe
exit

Program
import std.stdio;
import std.file;
import std.path;
import std.system;

void main()
{
  version (Windows) {
  auto p = "N:\\\BACKUP";
   if (!p.isValidPath && !p.strip.isValidFilename || !p.exists ) { 
writeln("Invalid File Path (", p, ") or Path do not Exist"); }
   else { writeln("File Exist":, p); }
}
   }

From,
Vino.B
Dec 01
parent reply Vino <vino.bheeman hotmail.com> writes:
On Saturday, 2 December 2017 at 05:08:27 UTC, Vino wrote:
 Hi All,

   Request your help, I have samll program which validates the 
 file path, the script run perfectly when i run it manually, but 
 if i run it via windows task scheduler i am getting "Invalid 
 File Path <Path> or Path do not Exist", The path is a windows 
 share, Even tried to add the net path as 
 "\\\\server\\share$\\BACKUP" for the parameter "p" in the below 
 code but no luck, the same error.

 Even tried to call this program via .bat script not luck same 
 error

 Windows .BAT program
  echo off
 cd D:\DScript
 start /D D:\DScript /B /WAIT D:\DScript\TestDir.exe
 exit

 Program
 import std.stdio;
 import std.file;
 import std.path;
 import std.system;

 void main()
 {
  version (Windows) {
  auto p = "N:\\\BACKUP";
   if (!p.isValidPath && !p.strip.isValidFilename || !p.exists ) 
 { writeln("Invalid File Path (", p, ") or Path do not Exist"); }
   else { writeln("File Exist":, p); }
 }
   }

 From,
 Vino.B
Even tried with the below code, it works manually but not via Windows scheduler with option "Run whether user is logged on or not" Program: import std.stdio; import std.file; import std.path; import std.string; import std.process; void main() { auto result = execute(["C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe", "-command", "New-PSDrive -Name", "R", "-PSProvider FileSystem -Root", "\\\\bp1xeuss005-f05.bp.com\\ea_sap_basis2$", "-Persist"]); auto p = "R:\\BACKUP"; if (!p.isValidPath && !p.strip.isValidFilename || !p.exists ) { writeln("Invalid File Path (", p, ") or Path do not Exist"); } else { writeln("File Exist :", p); } } From, Vino.B
Dec 01
next sibling parent codephantom <me noyb.com> writes:
On Saturday, 2 December 2017 at 07:48:14 UTC, Vino wrote:
 Even tried with the below code, it works manually but not via 
 Windows scheduler with option "Run whether user is logged on or 
 not"
Are you using appropriate credentials in the scheduled task?
Dec 02
prev sibling parent reply rjframe <dlang ryanjframe.com> writes:
On Sat, 02 Dec 2017 07:48:14 +0000, Vino wrote:

 On Saturday, 2 December 2017 at 05:08:27 UTC, Vino wrote:
 Hi All,

   Request your help, I have samll program which validates the
 file path, the script run perfectly when i run it manually, but if i
 run it via windows task scheduler i am getting "Invalid File Path
 <Path> or Path do not Exist", The path is a windows share, Even tried
 to add the net path as "\\\\server\\share$\\BACKUP" for the parameter
 "p" in the below code but no luck, the same error.

 Even tried to call this program via .bat script not luck same error

 Windows .BAT program  echo off cd D:\DScript start /D D:\DScript /B
 /WAIT D:\DScript\TestDir.exe exit

 Program import std.stdio;
 import std.file;
 import std.path;
 import std.system;

 void main()
 {
  version (Windows) { auto p = "N:\\\BACKUP";
   if (!p.isValidPath && !p.strip.isValidFilename || !p.exists )
 { writeln("Invalid File Path (", p, ") or Path do not Exist"); }
   else { writeln("File Exist":, p); }
 }
   }

 From,
 Vino.B
Even tried with the below code, it works manually but not via Windows scheduler with option "Run whether user is logged on or not" Program: import std.stdio; import std.file; import std.path; import std.string; import std.process; void main() { auto result = execute(["C:\\Windows\\System32\\WindowsPowerShell\\v1.0\
\powershell.exe",
 "-command", "New-PSDrive -Name", "R", "-PSProvider FileSystem -Root",
 "\\\\bp1xeuss005-f05.bp.com\\ea_sap_basis2$", "-Persist"]);
 auto p = "R:\\BACKUP";
 if (!p.isValidPath && !p.strip.isValidFilename || !p.exists ) {
 writeln("Invalid File Path (", p, ") or Path do not Exist"); }
 else { writeln("File Exist :", p); }
 
 }
 From,
 Vino.B
FYI: The backquote gives you a WYSIWYG string: `c:\windows\system32`, which is incredibly useful for Windows paths. I don't have a network share available to test with, but: Are you running with elevated privileges in the scheduled task? If so, do you run as admin when trying manually? If you mount the share as a user, I'm wondering if the task can't access it running in another context. You could try in the batch file, either adding ``` net use N: \\server\share\BACKUP /USER: <user> <password> ``` prior to running the exe (and "net delete" afterword), or try "pushd \\server\share\BACKUP" to access the path (and make it the current working directory). Use "popd \\server\share\BACKUP" at the end of the script. Source: https://blog.adrianbanks.co.uk/windows/2007/03/08/accessing- network-file-shares-from-a-command-prompt.html
Dec 02
parent reply Vino <vino.bheeman hotmail.com> writes:
On Saturday, 2 December 2017 at 13:05:37 UTC, rjframe wrote:
 On Sat, 02 Dec 2017 07:48:14 +0000, Vino wrote:

 On Saturday, 2 December 2017 at 05:08:27 UTC, Vino wrote:
 [...]
Even tried with the below code, it works manually but not via Windows scheduler with option "Run whether user is logged on or not" Program: import std.stdio; import std.file; import std.path; import std.string; import std.process; void main() { auto result = execute(["C:\\Windows\\System32\\WindowsPowerShell\\v1.0\
\powershell.exe",
 "-command", "New-PSDrive -Name", "R", "-PSProvider FileSystem 
 -Root",
 "\\\\bp1xeuss005-f05.bp.com\\ea_sap_basis2$", "-Persist"]);
 auto p = "R:\\BACKUP";
 if (!p.isValidPath && !p.strip.isValidFilename || !p.exists ) {
 writeln("Invalid File Path (", p, ") or Path do not Exist"); }
 else { writeln("File Exist :", p); }
 
 }
 From,
 Vino.B
FYI: The backquote gives you a WYSIWYG string: `c:\windows\system32`, which is incredibly useful for Windows paths. I don't have a network share available to test with, but: Are you running with elevated privileges in the scheduled task? If so, do you run as admin when trying manually? If you mount the share as a user, I'm wondering if the task can't access it running in another context. You could try in the batch file, either adding ``` net use N: \\server\share\BACKUP /USER: <user> <password> ``` prior to running the exe (and "net delete" afterword), or try "pushd \\server\share\BACKUP" to access the path (and make it the current working directory). Use "popd \\server\share\BACKUP" at the end of the script. Source: https://blog.adrianbanks.co.uk/windows/2007/03/08/accessing- network-file-shares-from-a-command-prompt.html
Hi, The script is schedule using a domain user id(domain\user id), and the windows share are mapped using the same user id /password and ran the scheduled task by login with the same domain user(Not Administrator) , the script executes fine when run manually and executes fine when scheduled with option "Run when user is logged in" , but the same is not running when schedule with option "Run whether user is logged in or not". The domain id is added to the Administrator Group and the Security policy "Logon as Batch user" is assigned. The domain id has the Full access to the Network share. From, Vino.B
Dec 02
next sibling parent reply Vino <vino.bheeman hotmail.com> writes:
On Saturday, 2 December 2017 at 14:16:17 UTC, Vino wrote:
 On Saturday, 2 December 2017 at 13:05:37 UTC, rjframe wrote:
 [...]
Hi, The script is schedule using a domain user id(domain\user id), and the windows share are mapped using the same user id /password and ran the scheduled task by login with the same domain user(Not Administrator) , the script executes fine when run manually and executes fine when scheduled with option "Run when user is logged in" , but the same is not running when schedule with option "Run whether user is logged in or not". The domain id is added to the Administrator Group and the Security policy "Logon as Batch user" is assigned. The domain id has the Full access to the Network share. From, Vino.B
Hi, Even tried the Option "Run with Highest Privilege" but no luck. and also tried with option "Configure for : Windows Vista , Windows Server 2008" From, Vino.B
Dec 02
parent reply codephantom <me noyb.com> writes:
On Saturday, 2 December 2017 at 14:23:48 UTC, Vino wrote:
 Hi,
   Even tried the Option "Run with Highest Privilege" but no 
 luck. and also tried with option "Configure for : Windows Vista 
 , Windows Server 2008"

 From,
 Vino.B
You haven't accidently ticked the 'Do not store password' option? That is a common mistake. (i.e. make sure it's *not* ticked, and reinsert credentials). In my 'sysadmin' days, I *refused* to use the windows scheduler. I didn't want something that kept changing depending on which version of windows you were using. I wanted consistency. From memory, i think I installed 'system scheduler' on all my MS servers. https://www.splinterware.com/tour/scheduler.html
Dec 02
parent reply vino <vino.bheeman hotmail.com> writes:
On Sunday, 3 December 2017 at 01:27:40 UTC, codephantom wrote:
 On Saturday, 2 December 2017 at 14:23:48 UTC, Vino wrote:
 Hi,
   Even tried the Option "Run with Highest Privilege" but no 
 luck. and also tried with option "Configure for : Windows 
 Vista , Windows Server 2008"

 From,
 Vino.B
You haven't accidently ticked the 'Do not store password' option? That is a common mistake. (i.e. make sure it's *not* ticked, and reinsert credentials). In my 'sysadmin' days, I *refused* to use the windows scheduler. I didn't want something that kept changing depending on which version of windows you were using. I wanted consistency. From memory, i think I installed 'system scheduler' on all my MS servers. https://www.splinterware.com/tour/scheduler.html
Hi All, Finally was able to resolve the issue, the issue was, the windows share was mapped using domain user so when the .bat program is scheduled via task manager with the option "Run whether the user is logged in or not" the .bat script run the task in session 0, where as the windows share was mapped in user session (domain user , session 23), so the the D program was not able to find the windows share path, so add the windows command "net use \\server\share" as the first line in the .bat and then added line calling the D program which resolved the issue. Option : Do not store password was unchecked" Solution: D Program(TestDir.exe) import std.stdio; import std.file; import std.path; void main() { auto p = "N:\\\\BACKUP"; if (!p.isValidPath && !p.strip.isValidFilename || !p.exists ) { writeln("Invalid File Path (", p, ") or Path do not Exist"); } else { writeln("File Exist":, p); } } } Bat Program(Run.bat) echo off net use N: \\shareserver\sharename /Persistence: No start /D D:\DScript /B /WAIT D:\DScript\TestDir.exe exit Question: Is there a way to map network drive in windows using D code, similar to the windows command such as "net use" or "pushd" or powershell command New-PSDrive.? From, Vino.B
Dec 03
parent rjframe <dlang ryanjframe.com> writes:
On Sun, 03 Dec 2017 16:42:46 +0000, vino wrote:

 Question:
 Is there a way to map network drive in windows using D code, similar to
 the windows command such as "net use" or "pushd" or powershell command
 New-PSDrive.?
 
 From,
 Vino.B
There's WNetAddConnection2[1] and WNetAddConnection3[2] in the Windows API. The API header module is core.sys.windows.winnetwk[3]. I've not used either function, but based on the documentation, it looks straightforward. --Ryan [1]: https://msdn.microsoft.com/en-us/library/windows/desktop/aa385413 (v=vs.85).aspx [2]: https://msdn.microsoft.com/en-us/library/windows/desktop/aa385418 (v=vs.85).aspx [3]: https://github.com/dlang/druntime/ blob/2db828bd4f21807254b770b3ec304f14596a9805/src/core/sys/windows/ winnetwk.d
Dec 03
prev sibling parent rjframe <dlang ryanjframe.com> writes:
On Sat, 02 Dec 2017 14:16:17 +0000, Vino wrote:

 Hi,
 
    The script is schedule using a domain user id(domain\user id),
 and the windows share are mapped using the same user id /password and
 ran the scheduled task by login with the same domain user(Not
 Administrator) , the script executes fine when run manually and executes
 fine when scheduled with option "Run when user is logged in" , but the
 same is not running when schedule with option "Run whether user is
 logged in or not". The domain id is added to the Administrator Group and
 the Security policy "Logon as Batch user"
 is assigned. The domain id has the Full access to the Network share.
 
 From,
 Vino.B
Is storing the password allowed by your local security policy? (gpedit on the local machine: Computer Configuration > Windows Settings > Security Settings > Local Policies > Security Options > Network access: Do not allow storage of passwords and credentials for network authentication) Other than that, I'm out of ideas; this should be a slow week at work so I might be able to try later. Note that running "whether logged on or not" will run in interactive mode so your `writeln`s won't output anywhere; you'd need to log to a file. But it shouldn't restrict network access. --Ryan
Dec 02