可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Is it possible, in Windows XP, to copy files to a Network Place from the command line, a batch file or, even better, a PowerShell script?
What sent me down this road of research was trying to publish files to a WSS 3.0 document library from a user's machine. I can't map a drive to the library in question because the WSS site is only available to authenticate via NTLM on a port other than 80 or 443. I suppose I could alternately use the WSS web services to push the files out, but I'm really curious about the answer to this question now.
回答1:
Using a batch file, you can both log on to the resource and copy the file:
The Batch File would contain the following:
net use \\{dest-machine}\{destfolder} {password} /user:{username}
copy {file} \\{dest-machine}\{destfolder}
e.g.
net use \\Development\myfolder mypassword /user:Administrator
copy newfile.c \\development\myfolder
回答2:
If you are referring to a windows box
, just use xcopy
. It is pretty standard to have xcopy
available.
xcopy src \\dest-machine\shared-library-name\dest
xcopy \\src-machine\shared-library-name\dest src
回答3:
Powershell uses the abstraction of Providers to provide a common interface into datastores. These seem to stick with the common noun "Item", so you can get a complete list with man *item*
. If you know another way to copy and otherwise work with data from a store, you might as well use it, but using the cmdlets provides a better "learn-once, use-often" approach. In your case you could:
Copy-Item test.txt -Destination \\dest-machine\share
Copy-item also supports the -Credential parameter if you need it.
回答4:
"Network Places" doesn't really have an API, it's just a bunch of shortcuts, and the SharePoint share uses a Shell Extension, if I recall correctly.
All of that to say: accessing Sharepoint as a file system from PowerShell also requires an extension, the SharePoint Provider.
回答5:
you could use the 'net' commands to authenticate and then copy the files.
copy src \\dest-machine\shared-library-name\dest
I'm not really sure exactly how to handle authentication if it's needed.
回答6:
From what I'm seeing, it seems that it's not possible to directly access/ manipulate a Network Place from the command line, be it in PowerShell or the plain ol' command prompt.
@slipsec (#13899):
Thanks for the suggestion, but PowerShell doesn't support the port number in the destination path any more than the net use
command does.
So the best thing I can figure to do in my particular situation is bite the bullet and buy something like WebDrive to enable drive mapping via WebDAV on non-standard ports, or do some different configuration (e.g. separate web app with a different IP address and host headers) in SharePoint to expose the site via NTLM on a standard port.
回答7:
If it's something you need to script, you should consider NAnt.
It's a mainly used for build scripts, but it's very powerful and reasonably easy to get started with.
There's also NAntContrib and the nant ftp task which should help you out.
回答8:
I could be wrong about this, but I think that neither Nick's robocopy solution or Nathan's copy command solution will work. Robocopy seems to want a mapped drive, which I can't do because it's not running on port 80 or 443, and Windows can't handle a path that includes the port in a UNC-style name:
copy src \\dest-machine:45000\shared-library-name\dest
I didn't see a NAnt task that would handle this situation, either.
I also know there are tools that will allow me to map WebDAV drives. I was more wondering if there was some way to make use of the Network Places that have been set up without using the GUI.
回答9:
Yes you can. I suggest using a tool like robocopy.